我正在阅读英特尔开发人员手册的第3a卷:
和第245页它暗示只有XCHG
指令具有自动总线锁定功能。 XADD
和CMPXCHG
等指令不会自动锁定系统总线,因此您需要使用LOCK
作为前缀。对我来说,这表明单独的指令不是跨多个CPU核心的原子。
那么这些指令的目的是什么,如果它们不是原子的?
在我阅读本手册之前,我预计这些指令在CPU级别本质上是原子的。我认为这就是组合“比较”和“设置”功能的原因。
编辑:
原因可能是在单个CPU核心上强制执行原子性?
答案 0 :(得分:-2)
不确定是否是原因,但编译器可以优化条件集,例如
if (n == 42) { n = 2 };
加入CMPXCHG
(没有LOCK
前缀)。