【问题标题】:Static constructor and simultaneous usage of class with it [duplicate]静态构造函数和类的同时使用[重复]
【发布时间】:2011-12-21 08:35:30
【问题描述】:

可能重复:
Is the C# static constructor thread safe?

我有多个线程使用同一个静态类和长时间运行的静态构造函数。

我可以确定,只有在完成由其中一个线程引起的对静态类的构造函数的调用后,才能从所有线程同时使用此类?

【问题讨论】:

    标签: c# .net static


    【解决方案1】:

    是的,当然。 C# 规范第 10.12 节保证了这一点。我试图找到一个更明确的关于线程的部分,因为该部分只保证它会被执行一次。

    请注意,如果你有一种“递归初始化”设置,你仍然可以在一个类完全初始化之前在一个类中执行代码——如果两个静态构造函数相互依赖,那么你最终会得到如果每个类在不同的线程中初始化,则会出现死锁。

    还请注意,空静态构造函数的存在会影响静态字段初始化程序的时间 - 如果您没有静态构造函数,则 CLR 可以在何时初始化字段时有更多的余地。 (实际行为随着时间的推移而改变,但始终在规范范围内。)有关静态字段初始化器的更多信息,请参阅规范的第 10.5.5.1 节。

    基本上,尽量保持静态构造函数简单且自包含。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-11
      • 1970-01-01
      • 2016-12-19
      • 1970-01-01
      • 2020-06-16
      相关资源
      最近更新 更多