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