このhttps://www.cl.cam.ac.uk/~pes20/cpp/cpp0xmappings.htmlMOV
によると、リリースされたストアはx86 (x86-64 を含む) で (メモリに)実装されます。
彼のhttp://en.cppreference.com/w/cpp/atomic/memory_orderによると
memory_order_release :
このメモリ順序でのストア操作は、解放操作を実行します。現在のスレッド内のメモリ アクセスは、このストアの後に順序を変更することはできません。これにより、現在のスレッドのすべての書き込みが、同じアトミック変数を取得する他のスレッドで可視になり、アトミック変数への依存関係を運ぶ書き込みが、同じアトミックを消費する他のスレッドで可視になることが保証されます。
memory_order_releaseを使用する場合、以前に行われたすべてのメモリ ストアは、この前に終了する必要があることを理解しています。
int a;
a = 10;
std::atomic<int> b;
b.store(50, std::memory_order_release); // i can be sure that 'a' is already 10, so processor can't reorder the stores to 'a' and 'b'
質問:MOV
むき出しの命令 (明示的なメモリ フェンスなし) でこの動作に十分であるとはどのように考えられるのでしょうか? MOV
前のすべてのストアを終了するようプロセッサに指示するにはどうすればよいですか?