マルチコアマシンのメモリフェンスを理解する必要があります。私はこのコードを持っていると言います
コア1
mov [_x], 1; mov r1, [_y]
コア2
mov [_y], 1; mov r2, [_x]
これで、メモリフェンスがない場合の予期しない結果は、実行後にr1とr2の両方が0になる可能性があることです。私の意見では、この問題に対処するには、両方のコードにメモリフェンスを配置する必要があります。これは、1つだけに設定しても問題が解決しないためです。次のようなもの...
コア1
mov [_x], 1; memory_fence; mov r1, [_y]
コア2
mov [_y], 1; memory_fence; mov r2, [_x]
私の理解は正しいですか、それとも私はまだ何かが欠けていますか?アーキテクチャがx86であると想定します。また、誰かがC ++コードにメモリフェンスを配置する方法を教えてもらえますか?