c# - 静态构造函数和类的同时使用

标签 c# .net static

<分区>

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/

相关文章:

C# 接口(interface)的 Expression.Property

c# - 无法引用 Microsoft.Device 命名空间

c# - .NET Framework 安装没有管理员权限

c# - 编译器为匿名方法生成了不正确的代码 [MS BUG FIXED]

go - 如何通过从另一个模块 B 调用模块的 A 函数来读取位于模块 A 中的静态文件?

c - C 中的局部变量和静态变量(续)

c# - 使用属性在事件上使用目标

c# - 通过 .exe 文件名杀死一些进程

swift - 给定一个 Swift 对象的实例,我们可以测试它的类是否存在类函数吗?

c# - Epplus : how to display double quaotes in string concatenation formula