繁体   English   中英

静态类线程的公共静态成员(属性)是否安全?

[英]Are public static members (properties) of static class thread safe

我有一个静态课程示例

public static class SampleClass
   {
    private static readonly string _personName;
    private static readonly string _country;

    static SampleClass()
    {
        _personName = "JourneyMan";
        _country = "Zee";
        System.Threading.Thread.Sleep(5000);
    }

    public static string PersonName
    {
        get { return _personName; }
    }

    public static string Country
    {
        get { return _country; }
    }
}

我故意在静态构造函数中引入了Thread.Sleep。

我编写了一个示例应用程序,其中两个线程在ManualResetEvent上等待。 我尝试模拟一种情况,其中一个线程尝试查询属性并正在执行静态构造函数并进入睡眠状态,另一个线程可以访问第二个属性并返回null值吗?

但是根据我的观察,除非构造完成,否则第二个线程无法获取属性值。

这是为我们处理的吗? 还是我做错了什么?

因此,在上述情况下,我可以假设不需要任何锁定来确保静态类的构建完成吗?

谢谢

静态构造函数是线程安全的,静态属性不是。

在创建类的任何实例或访问任何静态成员之前,保证静态构造函数在每个应用程序域仅运行一次。 http://msdn.microsoft.com/en-us/library/aa645612.aspx

在此示例中,您应该是线程安全的。 根据“静态构造函数” 文档 ,静态构造函数“在创建第一个实例或引用任何静态成员之前会自动调用”,因此应该不可能在构造函数完成之前引用成员。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM