的公共靜態成員(屬性),我有一個樣品靜態類是靜態類線程安全
public static class SampleClass
{
private static readonly string _personName;
private static readonly string _country;
static SampleClass()
{
_personName = "JourneyMan";
_country = "Zee";
System.Threading.Thread.Sleep(5000);
}
public static string PersonName
{
get { return _personName; }
}
public static string Country
{
get { return _country; }
}
}
我特意介紹了靜態構造一個Thread.sleep代碼。
我寫了一個示例應用程序,其中兩個線程在ManualResetEvent上等待。我試圖模擬一個線程試圖查詢屬性並執行靜態構造函數並進入睡眠狀態的場景,其他線程是否可以訪問第二個屬性並返回空值?
但根據我所觀察到的,除非構造完成,否則第二個線程無法獲取屬性值。
這是爲我們處理的嗎?或者我做錯了什麼?
那麼我可以假設,在上述情況下,沒有鎖需要確保靜態類的構造完成嗎?
謝謝
任何事情都只是線程安全的,標準AFAIK是你的靜態方法應該是線程安全的。 –
@GrantThomas所以我可以假設,除非施工完成,否則不允許線程查詢某個類的屬性? – Sandepku
Eric Lippert在靜態構造函數上做了一系列的工作。第1部分在http://ericlippert.com/2013/02/06/static-constructors-part-one/。值得一讀。而且,是的,在這種情況下不需要鎖。 –