首頁 >後端開發 >C++ >Meyers 的 Singleton 是線程安全的嗎?

Meyers 的 Singleton 是線程安全的嗎?

DDD
DDD原創
2024-12-29 11:40:11441瀏覽

Is Meyers' Singleton Thread-Safe?

Meyers 的Singleton:線程安全評估和增強

Meyers 的Singleton 模式實現利用延遲初始化,但其線程安全性仍然存在一個🎜>Meyers 的Singleton 模式實現利用延遲初始化,但其線程安全性仍然存在一個🎜>Meyers 的Singleton 模式實現利用延遲初始化,但其線程安全性仍然存在一個擔憂。本文深入研究了給定程式碼中執行緒安全的複雜性:

static Singleton& instance()
{
     static Singleton s;
     return s;
}

在C 11 及以後

在C 11 中,全域物件的延遲初始化是憑藉標準的保證,線程安全:並發初始化將導致等待直到其完成。 GCC 和 Visual Studio 都支援此功能。

因此,在 C 11 或更高版本的環境中,Meyers 的 Singleton 實作是執行緒安全的。

在 C 03 及之前

在 C 03 及更早版本中,提供的程式碼不是線程安全的。正如 Meyers 在他的文章中所述,雙重檢查鎖定模式可能容易受到某些架構上的競爭條件的影響。為了在此上下文中實現線程安全,建議對實例化方法進行完全鎖定。

C 03 執行緒安全程式碼

這裡是程式碼的修改C 03 執行緒安全:

static Singleton*& instance()
{
    static Singleton* s = nullptr;
    static std::mutex s_mutex;

    std::lock_guard<std::mutex> guard(s_mutex);
    if (!s)
        s = new Singleton;

    return s;
}

該實作在初始化期間使用互斥體來同步訪問,確保線程安全。

以上是Meyers 的 Singleton 是線程安全的嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn