1.Cache write → Cache Readの場合
図の通り、CPU1でCacheにコマンドを書き込んだとしてもそれがCPU2側の
Cache2から読み出す値と同じ値になっているかどうかは保証できない為、
タイミングによっては正しくコマンドが伝わらない。(下図)
2.Non Cache write → Cache Readの場合
図の通り、CPU1でShared memoryにコマンドを書き込んだとしてもそれが
CPU2側のCache2から読み出す値と同じ値になっているかどうかは保証できない為、
タイミングによっては正しくコマンドが伝わらない。(下図)
3..Cache write → Non Cache Readの場合
図の通り、CPU1でCacheにコマンドを書き込んだとしてもそれがCPU2側で
Shared memoryから読み出す値と同じ値になっているかどうかは保証できない為、
タイミングによっては正しくコマンドが伝わらない。(下図)
4.Non Cache write → Non Cache Readの場合
以下①~④のような事が起きるとCPU2がNon Cache Readする際に事前にCPU1がNon Cache writeしておいたコマンドが書き換えられしまっていて、正しくコマンド通信出来ない事がある。(下図①~④)
①CPU1内のスレッドAからコマンドをNon Cache Write
②CPU1内のスレッドBからコマンドと同じCache line上の別の値を変更
③②によりCPU1内のCacheがあふれてコマンドと同じline領域がNon Cache領域へライトバックされる事でShared memory上のコマンドが書き換えられる
④CPU2がNon Cache Readしたコマンド領域はすでにライトバックで破壊された後の不定な値となり、正しくコマンドが伝わらない。