“锁定”操作码前缀因“缓存一致性机制”而无用吗?

时间:2016-03-25 22:19:43

标签: multithreading assembly concurrency x86 cpu-cache

英特尔手册说:

  

8.1.4 LOCK操作对内部处理器高速缓存的影响
  ...
  缓存一致性机制自动阻止缓存相同内存区域的两个或多个处理器同时修改该区域中的数据。

这是否意味着lock操作码前缀对应用程序编程无用?

CPU缓存始终处于打开状态,并且所有应用程序可访问的内存都是可缓存的,因此缓存一致性机制始终处于保护状态,以保护存储在共享内存中的数据的完整性。

“缓存一致性机制”是多核CPU缓存的固有部分,它始终与您是否使用lock前缀无关。

更详细的问题:
我有Core2Duo CPU,我的应用程序在2个并行线程中运行,使用常见的全局变量 我可以安全地在locklock add [ESI],EAX等说明中跳过lock cmpxchg8b [ESI]前缀吗?

1 个答案:

答案 0 :(得分:6)

不,如果没有LOCK前缀,则不会在整个读取/修改/写入操作中保持缓存锁定。这意味着该操作不会对其他处理器显示为原子操作。 LOCK前缀还强制执行严格的内存排序,而不是通常使用的更宽松的强内存排序。