默认情况下是静态类构造函数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静态构造函数线程安全 –