首頁 >後端開發 >C++ >C 11 局部靜態變數初始化保證線程安全嗎?

C 11 局部靜態變數初始化保證線程安全嗎?

Linda Hamilton
Linda Hamilton原創
2024-12-25 06:45:10812瀏覽

Is C  11 Local Static Variable Initialization Guaranteed to be Thread-Safe?

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

C 中經常爭論的一個問題是局部靜態變數初始化的執行緒安全性,例如以下程式碼:

Logger& g_logger() {
    static Logger lg;
    return lg;
}

C 11 標準與執行緒安全性

在C 11在標準中,此類初始化的行為已經最終確定,現在保證它是線程安全的。標準第 6.7 節規定“此類變數在控制第一次通過其聲明時被初始化”,並且“並發執行應等待初始化完成”。此外,實作腳註澄清了「實作不得在初始化程式的執行周圍引入任何死鎖。」

編譯器實作

主要編譯器(gcc 4.7、vc 2011 和clang 3.0)已正確實作修訂後的線程安全要求。這意味著即使存在並發線程,lg 變數的建構子只會執行一次。

請注意,此保證僅適用於初始化本身。後續透過引用訪問變數不一定是線程安全的。

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

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