什么是CPU寄存器和CPU高速缓存之间的关系,当涉及到高速缓存一致性协议,例如MESI?如果某个值存储在CPU的缓存,并被存储在寄存器中,那么会发生什么,如果缓存线将被标记为“脏”?我的理解是没有gurentee该寄存器将更新,即使高速缓存被更新(由于MESI)它的价值。

亨奇此代码:

 static void Main()  
  {  
  bool complete = false;   
  var t = new Thread (() =>  
  {  
    bool toggle = false;  
    while (!complete) toggle = !toggle;  
  });  
  t.Start();  
  Thread.Sleep (1000);  
  complete = true;  
  t.Join();        // Blocks indefinitely  
}

(让我们假定编译器没有优化的外循环为“完整的”负载),点击 以我的理解,因为它的值保持寄存器内更新“完整”是不是第二个线程可见(CPU 2的缓存是更新不过)。

确实放置一个存储器屏障力以“刷新”所有的寄存器?什么寄存器缓存的关系?和约寄存器和存储器障碍什么?

有帮助吗?

解决方案

没有关系。使用 “易失性” 关键字。

其他提示

在x86平台保证高速缓存一致性使用MESI协议,即,在一个CPU高速缓存改变被自动地传播到其它CPU的高速缓存。 因此易失性关键字在x86和x64是有用的,只有以防止重新排序。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top