<分区>
Possible Duplicate:
Is the C# static constructor thread safe?
我有多个线程使用同一个静态类和长时间运行的静态构造函数。
我可以确定,所有线程对此类的同时使用只有在完成由该线程之一引起的对静态类的构造函数的调用后才可用吗?
<分区>
Possible Duplicate:
Is the C# static constructor thread safe?
我有多个线程使用同一个静态类和长时间运行的静态构造函数。
我可以确定,所有线程对此类的同时使用只有在完成由该线程之一引起的对静态类的构造函数的调用后才可用吗?
最佳答案
是的,绝对是。 C# 规范第 10.12 节保证了这一点。我试图找到一个更明确的关于线程的位,因为该部分只保证它会被执行一次。
请注意,如果您有某种“递归初始化”设置,您仍然可以在类中完全初始化之前执行代码 - 如果两个静态构造函数相互依赖,那么您最终可以如果每个类都在不同的线程中初始化,则会出现死锁。
另请注意,空静态构造函数的存在会影响静态字段初始化程序的时间 - 如果您没有静态构造函数,这会为 CLR 提供更多余地来决定何时初始化字段。 (实际行为随着时间的推移发生了变化,但始终在规范范围内。)有关静态字段初始值设定项的更多信息,请参阅规范的第 10.5.5.1 节。
基本上,尽可能保持静态构造函数简单和独立。
关于c# - 静态构造函数和类的同时使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8586968/