// ----------------------|----------------------|
// 线程 A | 线程 B |
// | |
// |---------| | |---------| |
// | 控制器 | | | 控制器 | |
// |---------| | |---------| |
// | 运算器 | | | 运算器 | |
// |---------| | |---------| |
// | L1 Cache| | | L1 Cache| |
// |---------| | |---------| |
// ---------------------------------------------|
// L2 Cache |
// ---------------------------------------------|
// 主内存 |
// |---------| |---------| |
// | 共享变量1| | 共享变量2 | |
// |---------| |---------| |
// ---------------------------------------------|
スレッドAおよびスレッドBの処理を同時に共有変数と、図のCPUアーキテクチャに示すように、
スレッドAおよびスレッドBを仮定すると、異なるCPUを使用して実行され、キャッシュの現在の二つが空である、によりキャッシュこの時間がもたらされますメモリの問題を具体的に分析を参照して、表示されません。
- 最初のスレッドが原因ヒットしませんでした2つのキャッシュに、共有変数Xの値を取得するので、ゼロの場合、Xの値でメインメモリにロードします。
次に、2つのスレッドにX = Oバッファキャッシュの値がXの修飾された値が1である場合、2つのキャッシュを書き込み、メインメモリへフラッシュしました。
操作後のスレッドは、二つのスレッドのキャッシュとメインメモリは内部1 XであるCPUの値を完了する。 - スレッドBが値X、キャッシュミスの最初を取得し、その後、2つのキャッシュを見て、L2キャッシュヒット、それがX = 1が返されます。
今回は、メインメモリはX = 1であるため、ここですべてが正常です。スレッドはその後、Xの値がB 2で修正、
およびキャッシュの場所とスレッド2シェア2つのキャッシュにそれを保存し、Xのメインメモリが最後に更新された値が2である、ここではすべてが大丈夫です。 - Xの値を変更するスレッド今回の必要性、キャッシュヒットの取得、およびX = 1は、ここでの質問は、Bは、X 2の値に変更されているスレッド明らかに、発生し、
なぜか1スレッドがそれを得ます?これは、共有メモリ変数が見える問題、不可視スレッドAに書き込まれたスレッドBの値はありませんです