首页 > 后端开发 > C++ > 如何确保C#静态构造函数和单例访问中的线程安全?

如何确保C#静态构造函数和单例访问中的线程安全?

DDD
发布: 2025-01-16 11:55:58
原创
579 人浏览过

How to Ensure Thread Safety in C# Static Constructors and Singleton Access?

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

在 C# 中,静态构造函数在任何类的实例初始化或静态成员访问之前执行。因此,它保证了单例初始构造的线程安全。

初始构造安全

提供的单例实现保证了此初始阶段的线程安全,因为它不依赖于锁定或空值测试。

实例访问安全

但是,这并不能保证随后对实例的使用是同步的。为了解决这个问题,可以进行以下改进:

<code class="language-csharp">public class Singleton
{
    // 添加静态互斥锁以同步对实例的访问
    private static System.Threading.Mutex mutex;
    private static Singleton instance;

    private Singleton() { }

    static Singleton()
    {
        instance = new Singleton();
        mutex = new System.Threading.Mutex();
    }

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

    public static void Release()
    {
        mutex.ReleaseMutex();
    }
}</code>
登录后复制

强制线程安全

此修改后的实现使用静态互斥锁来同步对实例的访问,确保一次只有一个线程可以访问它。要使用单例,线程必须调用 Acquire() 方法来获取实例,并在完成后调用 Release() 方法。

以上是如何确保C#静态构造函数和单例访问中的线程安全?的详细内容。更多信息请关注PHP中文网其他相关文章!

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