2013-03-12 73 views
1

我有一個線程安全計數器對象(它是一個使用std :: atomic load()和store()) 作爲類成員之一的類。線程1遞增計數器,線程2讀取計數器。C++中的對象的volatile關鍵字

通常,由不同線程共享的基本類型(int等)被聲明爲volatile以防止任何編譯器優化。我是否必須聲明這個線程安全的計數器對象,它由2個不同的線程共享爲易失性?

有人可以提供更多的見解嗎?

回答

0

看看:volatile (C++) msdn article

你不必因爲

  • 「在C++ 11的ISO標準代碼volatile關鍵字僅用於硬件訪問使用;不用於線程間通信,對於線程間通信,使用C++標準模板庫中的std :: atomic等機制。「
0

不,如果對象被聲明爲原子,則不需要。

C或C++編譯器可能不會將讀取和寫入重新排序到易失性存儲器位置,也不會忽略對易失性存儲器位置的讀取或寫入。

通過使用atomic,它已經實現了volatile打算做的事情,所以不需要聲明volatile

+0

你的意思是說如果對象實現原子操作就足夠了? – KodeWarrior 2013-03-12 21:31:49

+0

@KodeWarrior是的。 – zzk 2013-03-12 21:34:02

+0

我很懷疑。我認爲原子不保證編譯器優化的預防。 – KodeWarrior 2013-03-12 21:36:58

相關問題