メモリバリア
メモリバリア命令はハードウェアレベルの命令並べ替えに対するものである。メモリマップドI/Oアクセス時に必要とされる。コンパイラも最適化処理の一環として命令の並べ替えをすることがある。いずれの場合も並列処理では同様の問題を引き起こすので、マルチスレッドで共有されるデータに関わるコードの最適化を抑制する手段を提供する必要がある。なお、そのような手段が必要となるのは、同期プリミティブで保護されていないデータのみである。
C言語およびC++のキーワードvolatileを使用すると、その変数に関するメモリ操作の並べ替えや省略といった最適化を抑制することができる。これは、シングルプロセッサシステムでのマルチスレッドやシグナルハンドラといった割り込みに対する一種のバリアを提供するものである。しかし、volatileはコンパイラの最適化に関するものであるため、マルチプロセッサシステムでの並べ替え問題への解としては不十分である。
いくつかの言語はコンパイラの最適化にもアウト・オブ・オーダー実行にも対処する機能を持つものもあるが、そのコンパイラが生成したコードが本当に並べ替えを行っていないか調べるなど、十分注意して使用すべきである。コンパイラによる並べ替え問題を防ぐ必要があるときにはアセンブリ言語を直接使用することも考えられるが、一般的ではなく、生産性やメンテナンス性の観点からは現実的な選択肢ではない。