首頁 >後端開發 >C++ >Meyers 的單例實作在不同的 C 標準中是線程安全的嗎?

Meyers 的單例實作在不同的 C 標準中是線程安全的嗎?

Patricia Arquette
Patricia Arquette原創
2024-12-29 20:12:11963瀏覽

Is Meyers' Singleton Implementation Thread-Safe in Different C   Standards?

Meyers 的單例實現:不同C 標準中的線程安全

Meyers 的帶有延遲初始化的單例模式實現提出了有關其線程的問題安全。本文研究了它在不同 C 標準中的行為。

C 11 及更高版本

在 C 11 及後續標準中,Meyers 的 Singleton 實作是線程安全的。根據標準(§6.7 [stmt.dcl] p4),宣告的並發執行必須等待初始化完成。

C 03

在 C 03 中, Meyers 的 Singleton 實作不是執行緒安全的。 Meyers 關於「雙重檢查鎖定」的文章強調了這個問題。他建議對實例化方法進行完全鎖定,作為確保所有平台上執行緒安全的簡單方法。在沒有策略記憶體屏障的某些架構上,雙重檢查鎖定模式可能容易出現競爭條件。

支援的編譯器

並發動態初始化和銷毀(MSDN 上的 Magic Statics) ) 是確保 C 11 中執行緒安全的底層功能。以下編譯器支援此功能功能:

  • Visual Studio:自 Visual Studio 2015 起支援
  • GCC:自 GCC 4.3 起支援

以上是Meyers 的單例實作在不同的 C 標準中是線程安全的嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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