本地靜態變量初始化線程在C+11中是否安全?我知道這是一個經常被問到的問題,但由于有這么多的變體,我想重新聲明它,并希望有一個反映當前狀態的答案。有點像Logger& g_logger() {
static Logger lg;
return lg;}變量lg的構造函數是否保證只運行一次?我從以前的答案中知道,在C+03中,這不是;在C+0x草案中,這是強制的。但我想要一個更清晰的答案在C+11標準(非草案)中,線程安全初始化行為是否已經完成?如果以上是肯定的,那么在當前流行編譯器的最新版本,即GCC 4.7、vc 2011和clang 3.0中,它們是否得到了適當的實現?
2 回答
慕姐8265434
TA貢獻1813條經驗 獲得超2個贊
此類變量在控件第一次通過其聲明時被初始化;該變量在初始化完成后被視為初始化。[.]如果在初始化變量時控件同時輸入聲明,則并發執行應等待初始化完成。
實現不能在初始化器的執行過程中引入任何死鎖。
智慧大石
TA貢獻1946條經驗 獲得超3個贊
不要發出額外的代碼來使用C+ABI中指定的例程來進行本地靜力學的線程安全初始化。您可以使用此選項在不需要線程安全的代碼中稍微減少代碼大小。
- 2 回答
- 0 關注
- 678 瀏覽
添加回答
舉報
0/150
提交
取消
