インテルのマニュアルは言う:キャッシュ・コヒーレンシ・メカニズムは、自動的にメモリの同じ領域をキャッシュしている2つ以上のプロセッサを防止
内部プロセッサキャッシュ
にLOCK操作の"キャッシュコヒーレンシメカニズム"のため、 "ロック"オペコードプレフィックスは使用されていませんか?
8.1.4効果を...その領域内のデータを同時に変更する。
つまり、lock
オペコードのプレフィックスはアプリケーションプログラミングにとって役に立たないということですか?
CPUキャッシュは常にオンになっており、アプリケーションでアクセス可能なすべてのメモリがキャッシュ可能であるため、共有メモリに格納されたデータの整合性を保護するためにキャッシュコヒーレンシメカニズムは常にオンガードです。
は、「キャッシュ・コヒーレンシ・メカニズムは、」それは常に独立して、あなたがlock
接頭辞を使用しているか否かの作品、マルチコアCPUのキャッシュに内在している部分です。
さらに詳しい質問:
私はCore2Duo CPUを持っており、私のアプリケーションプログラムは共通のグローバル変数で動作する2つの並列スレッドで動作します。
接頭辞lock
を省略してlock add [ESI],EAX
とlock cmpxchg8b [ESI]
のような説明には間違いありませんか?
いいえ、省略しても安全です。キャッシュのコヒーレンシは命令をアトミックにしません。 – Jester
コヒーレンシメカニズムは、例えば、コアAのL1が、コアBのL1と異なるデータを有するキャッシュラインのキャッシュされたコピーを有する可能性を防止するだけである。 Rossの答えに追加するには、 'add [esi]、eax'は実際にはロード、追加、ストアです。 –