1

クラスメンバーの1つとしてスレッドセーフカウンターオブジェクト( std::atomic load() および store() を使用するクラス)があります。スレッド 1 はカウンターをインクリメントし、スレッド 2 はカウンターを読み取ります。

通常、異なるスレッドで共有されるプリミティブ型 ( int など) は、コンパイラの最適化を防ぐために volatile と宣言されます。2 つの異なるスレッドで共有されるこのスレッド セーフなカウンター オブジェクトを volatile として宣言する必要がありますか?

誰かがこれについてより多くの洞察を提供できますか?

4

2 に答える 2

0

参照してください:揮発性 (C++) msdn 記事

あなたはする必要はありません

  • 「C++11 ISO 標準コードの volatile キーワードは、ハードウェア アクセスにのみ使用されます。スレッド間通信には使用しないでください。スレッド間通信には、C++ 標準テンプレートの std::atomic などのメカニズムを使用してください。としょうかん。"
于 2013-03-12T21:27:08.117 に答える
0

いいえ。オブジェクトがアトミックと宣言されている場合は必要ありません。

AC または C++ コンパイラは、揮発性メモリ ロケーションへの読み取りと書き込みの順序を変更したり、揮発性メモリ ロケーションへの読み取りまたは書き込みを省略したりできません。

を使用することで、意図しatomicたことはすでに達成されているvolatileため、宣言する必要はありませんvolatile

于 2013-03-12T21:29:51.517 に答える