在执行“LOCK”之后的指令时,x86 ASM“LOCK”命令前缀是否会导致所有内核冻结?
我在博客文章中看到这个并没有意义。我找不到任何表明这是否属实的东西。
答案 0 :(得分:47)
关于锁定该地址的内存总线。 The Intel 64 and IA-32 Architectures Software Developer's Manual - Volume 3A: System Programming Guide, Part 1告诉我们:
7.1.4 LOCK操作对内部处理器高速缓存的影响。
对于Intel486和Pentium处理器,LOCK#信号总是如此 在LOCK期间在总线上断言 操作,即使是内存区域 被锁定被缓存在 处理器。
对于P6和更新的处理器 家庭,如果记忆区域是 在LOCK操作期间被锁定 缓存在处理器中 执行LOCK操作为 回写内存并且完全是 包含在缓存行中的 处理器可能没有断言LOCK# 总线上的信号。相反,它会 在内部修改内存位置 并允许[其]缓存一致性 机制,以确保操作 以原子方式进行。这个 操作称为“缓存锁定”。 缓存一致性机制 自动阻止两个或更多 具有相同面积的处理器 记忆来自同时修改 该地区的数据。 (重点补充)
在这里,我们了解到P6和更新的芯片足够聪明,可以确定它们是否真的必须阻止总线,或者只能依靠智能缓存。我认为这是一个很好的优化。
我在博客文章“How Do Locks Lock?”
中对此进行了更多讨论答案 1 :(得分:6)
不,但是当这个处理器访问内存时,它可能会强制其他处理器等待。这些等待状态是否会产生影响取决于处理器从缓存中运行的程度。