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