C 11 のmemory_order_release は、共有メモリへの書き込みが可視になる前に確実に完了するようにします。他のスレッドへ。同様に、memory_order_acquire は、読み取り操作がメモリに書き込まれた最新の値をフェッチすることを保証します。
x86 のドキュメントに基づいて、MOV 命令のみが取得-解放セマンティクスを伝達すると主張されています。ただし、このメカニズムがどのように動作するかについて疑問が生じます。
引用されたインテルのドキュメントでは、単一プロセッサ上で読み取りと書き込みが他の同様の操作と並べ替えられないことを強調しています。さらに、マルチコアのセクションでは、プロセッサがキャッシュ コヒーレント共有メモリにアクセスするときに同じ順序付け原則に従うと述べています。
取得と解放のセマンティクスを理解する鍵は次のとおりです。並べ替えは各 CPU コア内でローカルにのみ発生することを認識しています。ストアがグローバルに表示されると、すべてのコアが同時にアクセスできるようになり、その時点まではどのコアもストアを認識できなくなります。したがって、mfence などのローカル バリアは、後続のロードを許可する前にストア バッファをフラッシュすることで、逐次一貫性を確保します。
本質的に、x86 はキャッシュ コヒーレントな共有メモリ アーキテクチャを利用しており、コヒーレントなキャッシュがメモリ全体の共有ビューを提供します。プロセッサー。メモリ アクセスの一貫した性質により、シングルコア メモリ モデルが強化されます。このモデルでは、プログラム順序とストア バッファだけで取得と解放のセマンティクスを実装できます。
取得の原則-リリースとバリアの実装は x86 を超えて拡張されます。一般に、弱いメモリ モデルではローカルな並べ替えのみが許可され、特定の順序を強制するには CPU コア内のバリアが必要になります。
PowerPC は例外として、ストアが他のコアより先に一部のコアに表示されるようになり、IRIW の可能性が導入されます (独立読み取りまたは独立書き込み)の並べ替え。ただし、ほとんどのハードウェア メモリ モデルでは IRIW の並べ替えが禁止されており、すべてのコアにわたってグローバル ストアの順序付けが保証されています。
以上が単純な MOV 命令は、x86 上でリリース取得セマンティクスをどのように実現するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。