首頁 > 後端開發 > C++ > 如何使用C#靜態建構函數和單例模式確保執行緒安全?

如何使用C#靜態建構函數和單例模式確保執行緒安全?

Mary-Kate Olsen
發布: 2025-01-16 11:52:58
原創
933 人瀏覽過

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板