いいえ、プレフィックスMFENCE, SFENCE and LFENCE
に関連する命令を使用する必要はありません。LOCK
MFENCE, SFENCE and LFENCE
命令は、すべての CPU コアでメモリの可視性を保証します。インスタンスでは、MOV
命令をプレフィックスで使用することはできないLOCK
ため、メモリ移動の結果がすべての CPU コアに確実に表示されるようにするには、CPU キャッシュが RAM にフラッシュされ、フェンス命令で到達する必要があります。
編集: Intel マニュアルのロックされたアトミック操作の詳細:
ロックされたアトミック操作
32 ビット IA-32 プロセッサは、システム メモリ内の位置に対するロックされたアトミック操作をサポートします。これらの操作は、通常、2 つ以上のプロセッサが同じフィールドまたはフラグを同時に変更しようとする共有データ構造 (セマフォ、セグメント記述子、システム セグメント、またはページ テーブルなど) を管理するために使用されます。プロセッサは、ロックされたアトミック操作を実行するために、相互に依存する 3 つのメカニズムを使用します。
• 保証されたアトミック操作
• LOCK# 信号と LOCK 命令プレフィックスを使用したバス ロック
• キャッシュされたデータ構造に対してアトミック操作を実行できることを保証するキャッシュ コヒーレンシ プロトコル (キャッシュ ロック)。このメカニズムは、Pentium 4、Intel Xeon、および P6 ファミリ プロセッサに存在します。
これらのメカニズムは、次のように相互に依存しています。特定の基本的なメモリ トランザクション (システム メモリ内のバイトの読み取りまたは書き込みなど) は、常にアトミックに処理されることが保証されています。つまり、いったん開始すると、プロセッサは、別のプロセッサまたはバス エージェントがメモリ ロケーションへのアクセスを許可される前に操作が完了することを保証します。プロセッサは、選択されたメモリ操作 (メモリの共有領域での読み取り-変更-書き込み操作など) を実行するためのバス ロックもサポートします。これらの操作は通常、アトミックに処理する必要がありますが、この方法では自動的には処理されません。頻繁に使用されるメモリ位置はプロセッサの L1 または L2 キャッシュにキャッシュされることが多いため、バス ロックをアサートすることなくプロセッサのキャッシュ内でアトミック操作を実行できることがよくあります。