关于多核CPU的x86 LOCK问题

时间:2010-07-26 21:28:46

标签: assembly locking x86 cpu multicore

在执行“LOCK”之后的指令时,x86 ASM“LOCK”命令前缀是否会导致所有内核冻结?

我在博客文章中看到这个并没有意义。我找不到任何表明这是否属实的东西。

2 个答案:

答案 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)

不,但是当这个处理器访问内存时,它可能会强制其他处理器等待。这些等待状态是否会产生影响取决于处理器从缓存中运行的程度。