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