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

Ego*_*off 1 concurrency x86 assembly multithreading cpu-cache

英特尔手册说:

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

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

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

"高速缓存一致性机制"是多核CPU高速缓存的固有部分,它始终独立于您是否使用lock前缀.

更详细的问题:
我有Core2Duo CPU,我的应用程序在2个并行线程中运行,使用常见的全局变量.
它是安全的,我跳过lock的指令等前缀lock add [ESI],EAXlock cmpxchg8b [ESI]

Ros*_*dge 6

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