グローバル変数とvolatile

グローバル変数はvolatile扱いされるのか?

multithreading - Is a global implicitly volatile in C? - Stack Overflow
https://stackoverflow.com/questions/40614016/is-a-global-implicitly-volatile-in-c


Is a global implicitly volatile in C?
No.

  • グローバル変数はマルチスレッドで共有されるのでvolatileになると思ってるのなら間違いだ。なぜならローカル変数であってもそのアドレスを他スレッドに伝えることで共有ができるからだ。

volatileで最適化を抑制する - 職業としてのプログラミング
http://proger.blog10.fc2.com/blog-entry-20.html


具体的には、次の例のように、変数宣言にvolatile指定を追加します。
extern volatile int event_flag
これで、event_flagに対する最適化は抑制され、先ほどのような意図しない最適化も防ぐことが出来ます。