首頁 > 後端開發 > C++ > 如何確保C#靜態建構函數和單例存取中的執行緒安全?

如何確保C#靜態建構函數和單例存取中的執行緒安全?

DDD
發布: 2025-01-16 11:55:58
原創
579 人瀏覽過

How to Ensure Thread Safety in C# Static Constructors and Singleton Access?

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

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