首页 > 后端开发 > C++ > C# 的静态构造函数对于单例实现来说是线程安全的吗?

C# 的静态构造函数对于单例实现来说是线程安全的吗?

Mary-Kate Olsen
发布: 2025-01-16 11:31:59
原创
242 人浏览过

Is C#'s Static Constructor Thread-Safe for Singleton Implementations?

C#静态构造函数是线程安全的吗?

考虑以下单例实现:

<code class="language-csharp">public class Singleton
{
    private static Singleton instance;

    private Singleton() { }

    static Singleton()
    {
        instance = new Singleton();
    }

    public static Singleton Instance
    {
        get { return instance; }
    }
}</code>
登录后复制

这个实现是线程安全的吗?

答案:

静态构造函数(如示例中所示)保证在应用程序域中仅运行一次,早于任何类的实例被创建或静态成员被访问之前(https://www.php.cn/link/362c6840e40a65edd557a108c219f8f0)。

因此,单例实例的初始构造是线程安全的,这意味着它不需要锁定或空值测试。但是,这并不保证可以以同步方式使用单例对象。

为了实现对单例实例的任何使用的同步,可以使用几种方法。一种方法如下所示:

<code class="language-csharp">public class Singleton
{
    private static Singleton instance;
    // 添加静态互斥体以同步实例的使用。
    private static System.Threading.Mutex mutex;
    private Singleton() { }
    static Singleton()
    {
        instance = new Singleton();
        mutex = new System.Threading.Mutex();
    }

    public static Singleton Acquire()
    {
        mutex.WaitOne();
        return instance;
    }

    // 每次调用Acquire()都需要调用Release()
    public static void Release()
    {
        mutex.ReleaseMutex();
    }
}</code>
登录后复制

此实现引入了静态互斥体以同步对单例实例的访问。为了确保正确的同步,必须对每个实例的获取(Acquire())进行释放(Release())。

以上是C# 的静态构造函数对于单例实现来说是线程安全的吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板