Anthony Williams は、著書「C++ Concurrency in Action」の中で次のように書いています (309 ページ)。
たとえば、x86 および x86-64 アーキテクチャでは、タグ付けされた memory_order_relaxed または memory_order_seq_cst に関係なく、アトミック ロード操作は常に同じです (セクション 5.3.3 を参照)。つまり、緩和されたメモリー順序付けを使用して記述されたコードは、x86 アーキテクチャーのシステムでは機能する可能性がありますが、SPARC などのより粒度の細かいメモリー順序付け命令セットを使用するシステムでは失敗します。
x86 アーキテクチャではすべてのアトミック ロード操作がmemory_order_seq_cst
. さらに、cppreference std::memory_order
サイトでは、x86 では release-aquire の順序付けが自動であると記載されています。
この制限が有効な場合、順序付けはコンパイラの最適化に適用されますか?