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

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

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-03 15:22:41642瀏覽

Is C  11's Local Static Variable Initialization Thread-Safe?

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

問題:

C 中11.是否保證像下面這樣的局部靜態變數的建構子在a中只運行一次多執行緒上下文?

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

答案:

是的,lg 的建構子保證只運作一次。

C 11標準(第 6.7 節)規定,局部靜態變數在控制第一次通過其宣告時被初始化,並且這樣的初始化保證在任何初始化之前完成。可以繼續並發執行。此外,還需要實現確保在初始化程序執行期間不會發生死鎖。

因此,在 C 11 中,標準強制執行局部靜態變數的執行緒安全初始化。

實作狀態:

流行編譯器的最新版本(包括gcc 4.7、Visual C 2011 和Clang 3.0)已經過驗證,可以按照C 11 標準正確實現局部靜態變數的線程安全初始化。

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

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