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中文网其他相关文章!