teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

訂正

2018/02/19 08:52

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

answer CHANGED
@@ -1,3 +1,12 @@
1
+ 訂正:
2
+
3
+ すみませんが、自分の回答はvolatileを付けないとどうなるかの一例を挙げたにすぎずvolatileをどう使うかというトピックにはあまりに不十分であると思います。yohhoyさん回答からそう気づきました。
4
+
5
+ 例えばコンパイラーが生成するコードのみならずプロセッサーでもメモリーオーダリングが行われており、それを制御するのにはメモリーバリアを意識しなくてはならず、かつC/C++のvolatileはプロセッサによるメモリーオーダリングを制御するようなメモリーバリア機能を持たないということがyohhoyさん回答からわかりました。
6
+
7
+ そうした点だけとっても「volatileはそんな簡単に直接使えるようなものではない」と思いました。
8
+
9
+ ---
1
10
  自分の認識では「複数のスレッド(より厳密に言えば非同期に実行されるもの=割り込みなども含む)から並行して更新・参照される制御情報」にvolatileを付けるというのが判断基準です。
2
11
 
3
12
  gccのコンパイルの一例ですが