【C言語など】変数にアクセスする際のロック制御

一変数を複数スレッドからアクセスするときにmutexを使う必要があるのかわからない。
調べてもはっきりとはわからない。

今までの自分の知識では、
int型などの一変数の読み書きは不可分(アトミック)な操作(処理系によっては違うかも)なのでmutexなんて不要だと思っていた。
しかしコンパイラの最適化で変数がなくなったりタイミングがずれたり、
アウト・オブ・オーダー実行が起こったりするらしい。

よってmutexを使ったほうが無難ではある。

volatileを使ったり、ロックフリーな実装だったり、
mutexを使わない解決策はいろいろありそう。

参考: https://stackoverflow.com/questions/6553152/should-i-mutex-lock-a-single-variable