【发布时间】:2014-08-17 14:25:32
【问题描述】:
我被告知/在线阅读了缓存一致性协议 MESI/MESIF:
http://en.wikipedia.org/wiki/MESI_protocol
还强制执行原子性——例如对于锁。但是,这对我来说真的没有意义,原因如下:
1) MESI 管理所有指令的缓存访问。如果 MESI 也强制执行原子性,我们如何获得竞争条件?肯定所有指令都是原子的,我们永远不会得到竞争条件吗?
2) 如果 MESI 保证原子性,LOCK 前缀的意义何在?
3) 如果原子指令使用与所有其他 x86 指令相同的缓存一致性模型实现,为什么人们会说原子指令会带来开销?
一般来说,有人可以解释一下 CPU 是如何在低级别实现锁的吗?
【问题讨论】:
-
你不是刚刚ask this same question吗?
-
@KerrekSB 不完全是-我在回答后编辑了该问题以完善我的问题。现在我把它们都收集起来了——我创建了这个更集中的新问题。
-
请不要那样做。如果您的观点基本相同,但您只是未能正确表达,请修复现有问题。您可以使用赏金来吸引未来的关注。
-
您似乎混淆了可见性保证(没有线程看到旧内存值,缓存一致性协议的责任)与确保 am 指令以原子方式执行。
add [eax], 5在现代 cpu 中不是作为一条指令执行,而是分成几个较小的微操作 -
呸,这当然是可能的。因此,如果我调用没有 LOCK 前缀的“原子”x86 指令,这是否是原子指令,因为 CPU 具有确保指令在一个 CPU 周期内完成的特殊电路?或者这样的指令是否仍然需要原子性的缓存一致性策略?如果是前者我理解,如果是后者我很困惑。
标签: multithreading x86 cpu atomic cpu-architecture