私の知る限り、コンパイラ(ソフトウェア)とCPU(ハードウェア)はパフォーマンス上の理由から命令を並べ替えますが、メモリバリアは並べ替えを防ぐことができ、コンパイラレベルまたはCPUレベルにあります。
MSDN は、「Interlockedxxxx 関数は、メモリ操作が順番に完了するように完全なメモリ バリア (またはフェンス) を生成します」と述べていますが、「完全なメモリ バリア」がハードウェアまたはソフトウェアのバリアを意味するかどうかはわかりません。
boost::atomic によって何が行われますか? ハードウェアバリア?CPUキャッシュ/ストレージバッファをフラッシュしますか?
memory_order_acquire セマンティックは、ソフトウェアまたはハードウェアの障害になりますか?