volatile キーワードに関するこの質問への回答を読んでいました。
https://stackoverflow.com/a/2485177/997112
その人はこう言います。
並べ替えを防止する解決策は、メモリ バリアを使用することです。これは、コンパイラと CPU の両方に対して、この時点でメモリ アクセスを並べ替えることができないことを示します。volatile 変数アクセスの周りにこのようなバリアを配置することで、non-volatile アクセスでさえも volatile アクセスを介して並べ替えられないことが保証され、スレッド セーフなコードを記述できるようになります。
ただし、メモリバリアは、バリアに到達したときに保留中のすべての読み取り/書き込みが実行されることも保証するため、必要なものすべてを効果的に提供し、volatile を不要にします。volatile 修飾子を完全に削除するだけです。
この「メモリバリア」はC++でどのように実装されていますか?
編集:
誰かが簡単なコード例を教えてください。