【发布时间】:2014-10-12 11:17:34
【问题描述】:
我正在阅读英特尔开发人员手册的第 3a 卷:
在第 245 页上,它暗示只有 XCHG 指令具有自动总线锁定功能。 XADD 和 CMPXCHG 等指令不会自动锁定系统总线,为此您需要添加前缀 LOCK 。对我来说,这表明指令本身并不是跨多个 CPU 内核的原子。
如果这些指令不是原子的,那么这些指令的目的是什么?
在我阅读手册之前,我预计这些指令在 CPU 级别上本质上是原子的。我认为这就是结合“比较”和“设置”功能的原因。
编辑:
原因可能是在单个 CPU 内核上强制执行原子性??
【问题讨论】:
-
它支持在具有强大内存模型的处理器上进行无锁编程的圣杯。 this post 覆盖得很好。
-
为什么无锁编程不需要LOCK前缀?从您的链接看来,指令在该 CPU 上是原子的,但不是就多个 CPU/内核而言?
-
查看我对链接副本的回答,它正在回答这个确切的问题。 (虽然我不确定我发布的原始问题是为了问这个问题。哎呀:P)
标签: multithreading x86 cpu atomic compare-and-swap