x86 CPU0 と CPU1 でそれぞれ 2 つのスレッドが実行されているとします。CPU0 で実行されているスレッドは、次のコマンドを実行します。
A=1
B=1
最初に CPU1 が所有する A を含むキャッシュ ラインと、CPU0 が所有する B を含むキャッシュ ライン。
2 つの質問があります。
私の理解が正しければ、両方のストアが CPU のストア バッファに入れられます。ただし、最初のストア
A=1
では、CPU1 のキャッシュを無効にする必要がありますが、2 番目のストアB=1
は、それを含むキャッシュ ラインを所有しているため、すぐにフラッシュできます。x86 CPU がストア オーダーを尊重することはわかっています。B=1
それは前にキャッシュに書き込まれないということA=1
ですか?CPU1 で次のコマンドが実行されるとします。
ながら (B=0);
プリントA
x86 で常に 1 を出力するには、CPU0 との間に sfence を追加せずに、CPU1 のwhile
とprint
コマンドの間に lfence のみを追加するだけで十分ですか?A=1
B=1
while (B=0);
lfence
print A