没有LOCK前缀的CMPXCHG指令的用途?

时间:2014-08-19 11:16:35

标签: multithreading x86 cpu atomic compare-and-swap

我正在阅读英特尔开发人员手册的第3a卷:

http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software-developer-vol-3a-part-1-manual.html

和第245页它暗示只有XCHG指令具有自动总线锁定功能。 XADDCMPXCHG等指令不会自动锁定系统总线,因此您需要使用LOCK作为前缀。对我来说,这表明单独的指令不是跨多个CPU核心的原子。

那么这些指令的目的是什么,如果它们不是原子的?

在我阅读本手册之前,我预计这些指令在CPU级别本质上是原子的。我认为这就是组合“比较”和“设置”功能的原因。

编辑:

原因可能是在单个CPU核心上强制执行原子性?

1 个答案:

答案 0 :(得分:-2)

不确定是否是原因,但编译器可以优化条件集,例如

if (n == 42) { n = 2 };

加入CMPXCHG(没有LOCK前缀)。