MESI (Modified,Exclusive,Shared,Invalid)协议用于CPU缓存进行通信,并确保它们都使用最新的缓存线的值。然而,在我读过的所有关于MESI的文献中,我还没有看到在协议通信时是否会有任何性能损失?此成本是否只是x86 LOCK前缀成本的一部分?我相当确定即使在x86 LOCK前缀不是?注意:英特尔实际上使用的是MESIF协议--其中F是附加的“转发”状态。
然而,我的同事说,MESI协议(不考虑cpu没有MESI或类似的东西)能够在cpu缓存之间自动同步,如果读取一个由其他线程更新的变量,并且在读写时没有任何同步(只是简单地读,例如" if (a !似乎MESI确实可以做“自动同步”(程序员不需要做任何事情),“PrRd”和“PrWr”看起来只是正常的读写请求,没有锁或CMPXCHG或类似的东西。