为什么在intel架构中CMPXCHG之前需要锁定前缀。
请参阅参考http://courses.engr.illinois.edu/ece390/archive/spr2002/books/labmanual/inst-ref-cmpxchg.html
我不确定如果不使用锁会有什么后果。因为在将值加载到 eax 和执行 LOCK CMPXCHG 之间,无论锁定前缀如何,该值都可能会更改,因为将值加载到 eax 和 LOCK CMPXCHG 是两条指令。
意思是说,如果我不使用 CMPXCHG,可能发生的最糟糕的事情是我必须再次旋转。
-
CMXCHG
仅当它带有前缀时,在多处理器系统上才是真正的原子(断言总线锁)LOCK
。如今,正在使用基于侦听的缓存一致性协议,这消除了对栅栏(总线锁)的需要。
- 来到问题的第二部分(无论如何,该值都会改变)。是的,在这种情况下
CMPXCHG
指令失败,但对于所有处理器来说仍然是原子的。
底线: 锁定前缀使CMPXCHG
多处理器屏障指令。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)