首頁 >後端開發 >C++ >C 11 如何保證局部靜態變數的執行緒安全初始化?

C 11 如何保證局部靜態變數的執行緒安全初始化?

Barbara Streisand
Barbara Streisand原創
2024-12-24 12:11:15256瀏覽

How Does C  11 Guarantee Thread-Safe Initialization of Local Static Variables?

C 11 中局部靜態變數的線程安全初始化

人們對C 11 中局部靜態變數的線程安全初始化提出了擔憂C及其跨不同標準的演進。讓我們在 C 11 的背景下具體解決這個問題。

C 11 標準

第6.7 節中的C 11 標準(不是草案)指定:

  • 局部靜態變數在草案第一次進入它們時被初始化聲明。
  • 在變數初始化時進入宣告的並發執行必須等待初始化完成。
  • 實作在初始化程序執行期間不得引入死鎖。

因此,在C 11中,局部靜態變數的執行緒安全初始化完成。

熱門編譯器實作

主要編譯器,例如:

  • gcc 4.7
  • 2011
  • clang 3.0

已正確實現所需的線程安全初始化行為按 C 11 標準。這可以確保範例中的 lg 這樣的局部靜態變數的建構函式即使在多執行緒環境中也只能執行一次。

其他注意事項

這很重要需要注意的是,執行緒安全初始化僅適用於變數本身的初始化。除非採用額外的同步機制,否則透過引用對變數的後續存取不能保證是線程安全的。

以上是C 11 如何保證局部靜態變數的執行緒安全初始化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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