私はthis MSDN article on lockless thread syncingを読んでいました。この記事では、共有変数にアクセスする前にロックを入力する限り、これらの変数は最新の状態になることを推測しているようです(少なくとも.NET 2.0では)。ロックを使用すると、読み取りと書き込みがキャッシュからフラッシュされますか?もしそうなら、どうですか?
私はこれがどのように可能であるか考えたかったのですか? .Netのロックは、メモリにアクセスする前にすべてのスレッドがチェックする任意のオブジェクトですが、ロック自体はアクセスされているメモリの場所を認識していません。
変数を更新しているスレッド、またはメモリ全体を更新している場合、ロックを開始または終了するときに、これらの更新がCPUキャッシュからどのようにフラッシュされることが保証されていますか?すべてのメモリアクセスがロック内で効果的に揮発性になりますか?
私は多くの経験がありますが、アクセスしているメモリの場所がCPUキャッシュにあるのかどうかは関係ありません。 –
@BenRobinson - ヒープ上の1つの整数にアクセスする異なるコアで2つのスレッドが実行されているとします。この場合、適切な同期方法が適用されていない限り、各スレッドはローカルコアのキャッシュに値のコピーを格納することがあります。 – Polity