首頁 >後端開發 >C++ >Meyers 的單例模式在 C 11 及更高版本中是線程安全的嗎?

Meyers 的單例模式在 C 11 及更高版本中是線程安全的嗎?

Patricia Arquette
Patricia Arquette原創
2024-12-30 17:04:10919瀏覽

Is Meyers' Singleton Pattern Thread-Safe in C  11 and Later?

Meyers 單例模式實現的線程安全

這種使用延遲初始化的Meyers 單例模式實現了有關其線程安全性的問題。

邁耶斯單例實現

單例模式提供的代碼如下:

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

線程安全分析

在C 11中,這由於§6.7 [stmt.dcl]中的保證,實現是線程安全的p4:

「如果在初始化變數時控制同時進入聲明,則並發執行應等待初始化完成。」

GCC(自版本4.3 起)和Visual 等編譯器Studio(自2015 年起)支援此功能。

C 03實作

在 C 03 中,程式碼不是執行緒安全的。 Meyers 的文章「C 和雙重檢查鎖定的危險」討論了此類問題。建議對實例化方法進行完全鎖定以確保並發性,而雙重檢查鎖定變體可能會在沒有記憶體障礙的特定架構上遇到競爭條件。

以上是Meyers 的單例模式在 C 11 及更高版本中是線程安全的嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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