>>623
値が volatile なことと操作が atomic なことは別の話だよ。
自分が書き換えない同じ領域を複数参照するとき、それを他の誰も書き換えないならその参照は一度目の値と同じになる前提で最適化できるけど、他の誰かがいつの間にか書き換えることがあるならそういう最適化はできなくなる。
そういう領域であることを明示するのが volatile。
atomic は同じ領域を誰かが書き換える前提なので基本的にその領域は volatile だけど、それに加えて値を参照して手を加えて書き戻すなどの一連の手続きの途中で他の誰かにいじられないことを保証すること。
それを CPUレベルの命令で行うかソフトウェア的なロックで行うかで色分けされてるだけ。