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中文網其他相關文章!