This question already has answers here:
Is x86 CMPXCHG atomic, if so why does it need LOCK?
(3 个回答)
2年前关闭。
为什么我们需要在英特尔架构中的 CMPXCHG 之前加锁前缀。
请参阅以供引用
http://courses.engr.illinois.edu/ece390/archive/spr2002/books/labmanual/inst-ref-cmpxchg.html
我不确定如果不使用锁会有什么后果。因为在将值加载到 eax 和执行 LOCK CMPXCHG 之间,可以更改值而不考虑锁定前缀,因为将值加载到 eax 和 LOCK CMPXCHG 是两条指令。
意思是说,如果我不使用 CMPXCHG,可能发生的最糟糕的事情是我必须再次旋转。 来到问题的第二部分(值无论如何都会改变)。 YES 在这种情况下
底线 :锁定前缀使
(3 个回答)
2年前关闭。
为什么我们需要在英特尔架构中的 CMPXCHG 之前加锁前缀。
请参阅以供引用
http://courses.engr.illinois.edu/ece390/archive/spr2002/books/labmanual/inst-ref-cmpxchg.html
我不确定如果不使用锁会有什么后果。因为在将值加载到 eax 和执行 LOCK CMPXCHG 之间,可以更改值而不考虑锁定前缀,因为将值加载到 eax 和 LOCK CMPXCHG 是两条指令。
意思是说,如果我不使用 CMPXCHG,可能发生的最糟糕的事情是我必须再次旋转。
最佳答案
CMXCHG
仅在多处理器系统上以 LOCK
为前缀时才是真正的原子(断言总线锁定)。目前正在使用基于监听的缓存一致性协议(protocol),这消除了对栅栏(总线锁)的需要。 CMPXCHG
指令失败,但对于所有处理器仍然是原子的。 底线 :锁定前缀使
CMPXCHG
成为多处理器屏障指令。10-08 17:46