首页 >后端开发 >C++ >如何使用C#静态构造函数和单例模式确保线程安全?

如何使用C#静态构造函数和单例模式确保线程安全?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-16 11:52:58934浏览

How to Ensure Thread Safety with C# Static Constructors and Singleton Pattern?

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

在C#中,静态构造函数在创建任何类实例或访问静态成员之前,每个应用程序域只执行一次。这确保了它们在初始构造时的线程安全,无需在单例对象创建期间进行锁定和空值测试。

然而,后续对实例的使用可能并非同步的。为了解决这个问题,可以考虑添加一个静态互斥锁来同步对实例的访问。

下面是一个包含互斥锁的线程安全单例实现示例:

<code class="language-c#">public class Singleton
{
    private static Singleton instance;
    private static System.Threading.Mutex mutex = new System.Threading.Mutex(); // 初始化互斥锁
    private Singleton() { }

    public static Singleton Instance
    {
        get
        {
            mutex.WaitOne();
            try
            {
                if (instance == null)
                {
                    instance = new Singleton();
                }
                return instance;
            }
            finally
            {
                mutex.ReleaseMutex();
            }
        }
    }
}</code>

此实现使用Instance属性来同步对单例实例的访问,确保所有后续使用场景的线程安全操作。 通过在get访问器中使用try...finally块,确保即使发生异常,互斥锁也能正确释放。 这比原始示例中的Acquire()Release()方法更简洁安全。

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn