2

マルチプロセッサでは、次のことを知っていlock inc memます。ロックは、他の操作がアドレスにアクセスできないことを保証できますmem

ただし、1 つのプロセッサがmov eax,mem最初に実行され、それが完了する前に、2 番目のプロセッサが実行されlock inc memます。

結果はどうなりますか?

  1. 2 番目の命令 ( ) は 1 番目の命令 ( ) が完了lock inc memするまで待機しますか? mov eax,mem(結果として、最初に正しい値が得られます)

  2. 両方の命令が同時に実行されます。(結果として、最初は予期しない値を取得する可能性があります)

4

2 に答える 2

2

mem が 32 ビットでアラインされている場合、mov 操作はアトミックであることが保証されます。ソフトウェア開発者向けマニュアルのボリューム 3A を引用すると、「プロセッサは、いったん開始されると、別のプロセッサまたはバス エージェントがメモリ ロケーションへのアクセスを許可される前に操作が完了することを保証します」

于 2012-07-25T16:17:26.567 に答える
2

mov EAX,[mem]、すべてのビットを並行して読み取るという点でアトミックです。部分的な結果が得られる可能性はありません。更新の前または後に値を取得するかどうかはそれほど重要ではありません。

inc [mem]、メモリ位置への読み取りと書き込みの両方を行うという点で異なります。それらのうちの 2 つを並行して実行している場合、一方が他方の結果を上書きする可能性があるため、結果は予測できません。a を使用するlockと、命令全体でバスを要求することで解決します。他の誰もが待つ必要があります。

于 2012-07-25T16:18:02.870 に答える