本地靜態(tài)變量初始化線程在C+11中是否安全?我知道這是一個經(jīng)常被問到的問題,但由于有這么多的變體,我想重新聲明它,并希望有一個反映當前狀態(tài)的答案。有點像Logger& g_logger() {
static Logger lg;
return lg;}變量lg的構(gòu)造函數(shù)是否保證只運行一次?我從以前的答案中知道,在C+03中,這不是;在C+0x草案中,這是強制的。但我想要一個更清晰的答案在C+11標準(非草案)中,線程安全初始化行為是否已經(jīng)完成?如果以上是肯定的,那么在當前流行編譯器的最新版本,即GCC 4.7、vc 2011和clang 3.0中,它們是否得到了適當?shù)膶崿F(xiàn)?
2 回答

慕姐8265434
TA貢獻1813條經(jīng)驗 獲得超2個贊
此類變量在控件第一次通過其聲明時被初始化;該變量在初始化完成后被視為初始化。[.]如果在初始化變量時控件同時輸入聲明,則并發(fā)執(zhí)行應(yīng)等待初始化完成。
實現(xiàn)不能在初始化器的執(zhí)行過程中引入任何死鎖。

智慧大石
TA貢獻1946條經(jīng)驗 獲得超3個贊
不要發(fā)出額外的代碼來使用C+ABI中指定的例程來進行本地靜力學的線程安全初始化。您可以使用此選項在不需要線程安全的代碼中稍微減少代碼大小。
- 2 回答
- 0 關(guān)注
- 659 瀏覽
添加回答
舉報
0/150
提交
取消