4

为什么在英特尔架构中我们需要在 CMPXCHG 之前锁定前缀。请参阅 http://courses.engr.illinois.edu/ece390/archive/spr2002/books/labmanual/inst-ref-cmpxchg.html以供参考

我不确定如果不使用锁会有什么后果。因为在将值加载到 eax 和执行 LOCK CMPXCHG 之间,无论锁定前缀如何,值都可以更改,因为将值加载到 eax 和 LOCK CMPXCHG 是两条指令。

意思是说,如果我不使用 CMPXCHG,最糟糕的可能是我必须再次旋转。

4

1 回答 1

3
  • CMXCHG只有在多处理器系统上以 . 为前缀时,它才是真正的原子(断言总线锁)LOCK。现在正在使用基于窥探的缓存一致性协议,这消除了对栅栏(总线锁)的需要。
  • 来到问题的第二部分(无论如何都会改变值)。是的,在这种情况下CMPXCHG指令失败,但对于所有处理器来说仍然是原子的。

底线:锁定前缀使CMPXCHG多处理器屏障指令。

于 2014-01-30T19:40:44.500 回答