关于多核CPU的x86 LOCK问题

Iam*_*mIC 33 cpu x86 assembly locking multicore

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

我在博客文章中读到这篇文章并没有意义.我找不到任何表明这是否真实的东西.

Jef*_*ser 48

它是关于锁定该地址的内存总线.英特尔64和IA-32架构软件开发人员手册 - 卷3A:系统编程指南,第1部分告诉我们:

7.1.4 LOCK操作对内部处理器高速缓存的影响.

对于Intel486和Pentium处理器,LOCK#信号在LOCK操作期间始终在总线上置位,即使被锁定的存储器区域缓存在处理器中也是如此.

对于P6和更新的处理器系列,如果在LOCK操作期间被锁定的存储器区域被高速缓存在执行LOCK操作作为回写存储器并且完全包含在高速缓存行中的处理器中,则处理器可能不会断言总线上的LOCK#信号.相反,它将在内部修改内存位置并允许[其]缓存一致性机制以确保操作以原子方式执行.此操作称为"缓存锁定".高速缓存一致性机制自动防止具有相同存储区域的两个或多个处理器同时修改该区域中的数据.(重点补充)

在这里,我们了解到P6和更新的芯片足够聪明,可以确定它们是否真的必须阻止总线,或者只能依靠智能缓存.我认为这是一个很好的优化.

我在博客文章" Hows Locks Lock? "中对此进行了更多的讨论.


Ste*_*dit 6

不,但它可能会迫使其他处理器等待访问内存.这些等待状态是否会产生影响取决于处理器运行缓存的程度.