C 11 後 建立區域性靜態指標是否執行緒安全?

時間 2021-06-07 19:58:22

1樓:啊啊

區域性靜態的指標也是執行緒安全的。證據如下:

std::

mutex

mutex

;void

Output

(std

::string

log)

class

Object

void

test

()private

:int

data=0

;};Object

*test

()int

main

()std

::stringstreamss;

ss<<

"Wait for them to join."

<

endl

;Output(ss

.str

());

for(

auto&t

:threads)ss

.str(""

);ss

<<"All threads joined."

<

endl

;Output(ss

.str

());

return0;

}vs2017執行結果

vs2013會報錯,第二個執行緒會因訪問test裡的成員(此時物件在第乙個執行緒還未構造成功)導致crash。 2013還未完整支援c++11的特性,包括static的多執行緒支援。

2樓:ganler

靜態變數的建立有(執行緒安全)保證,除此之外,讀/寫都沒有。

所以你可以lambda + static當call_once使用。

C 11有了lambda後bind還有多大意義?

fe263 C 14已經廢棄bind了 不好意思,bind沒被廢棄.不過bind在C 14起沒什麼卵用了.我看到的唯一好用的地方是需要捕獲多個引數變成乙個無參呼叫的情況 template auto pack F f,T t return f std forward f args make tuple...

c 11中std unique ptr需要明確知道型別的析構函式,而shared ptr不需要?

土地測量員 詳細講一下std unique ptr的部分吧。std unique ptr需要明確知道型別的析構函式 unique ptr型別是 template class T,class Deleter std default delete class unique ptr private T p...

C 11為什麼引入nullptr?

徐辰 因為C 他爹早就看0這個magic number不爽了,當年沒顧上搞,一直拖到2011年了,再不瘋狂一把C 就沒人用了。 enpeng xu 問題的關鍵是c 不知道怎麼正確做void 到 T 的預設轉換,所以多此一舉的引入了nullptr。某些情況做下c 編譯器不知道怎麼把 void ptr正...