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中文網其他相關文章!