默認情況下是靜態類構造函數threadsafe?或者它需要明確做出線程安全?線程安全靜態類和構造函數
1
A
回答
4
CLR保證靜態構造函數將在AppDomain的整個生命週期中僅被調用一次。它將被稱爲第一次訪問靜態成員或創建實例。而且由於每個AppDomain僅被調用一次,所以您可以放心地假設只有一個線程可以調用它。
0
如果通過線程安全,你的意思是「它只會被調用一次嗎?」,那麼答案是肯定的。但是,CLR通過全局鎖定來阻止多個線程調用靜態構造函數。這意味着如果你做了一些事情會導致另一個線程嘗試獲取該鎖(例如,通過調用類的靜態方法),那麼就有可能發生死鎖。
例如,下面的程序死鎖(從埃裏克利珀我似乎,但不能找到一個參考):
public class Program
{
static Program()
{
Thread thread = new Thread(Test);
thread.Start();
thread.Join();
}
public static void Main(string[] args)
{
Console.WriteLine("Hello, world!");
}
static void Test() { }
}
相關問題
- 1. 線程安全和靜態函數
- 2. C++線程靜態構造函數
- 3. 線程安全和靜態子類
- 4. 靜態類構造函數和靜態類字段的範圍
- 5. 安全__attribute __((構造函數))函數類
- 6. 構造函數和靜態函數
- 7. Java反射中的構造函數類的線程安全
- 8. 靜態變量,線程和構造函數Java
- 9. 靜態類的線程安全
- 10. SqlServer類靜態方法 - 線程安全
- 11. 是靜態類線程安全
- 12. 公共構造函數和靜態構造函數
- 13. 靜態類C#構造函數OOP
- 14. Python類構造函數(靜態)
- 15. Python靜態類型的構造函數?
- 16. 使用構造函數時的靜態類和動態類
- 17. 靜態成員函數和線程安全
- 18. Java - 靜態構造函數
- 19. 靜態方法和線程安全
- 20. Java靜態和線程安全
- 21. Java靜態方法和線程安全
- 22. 靜態方法和線程安全
- 23. String類的構造函數安全
- 24. 製造類線程安全
- 25. 靜態導入和構造函數
- 26. 靜態構造函數和繼承
- 27. C++靜態庫和構造函數
- 28. Assembly.GetCallingAssembly()和靜態構造函數?
- 29. 靜態構造函數和BeforeFieldInit?
- 30. 靜態構造函數和單
http://stackoverflow.com/questions/7095/is-the-c -sharp靜態構造函數線程安全 –