"lock" 操作码前缀是否因为 "cache coherency mechanism" 而无用?
Is "lock" opcode prefix of no use because of "cache coherency mechanism"?
英特尔手册说:
8.1.4 Effects of a LOCK Operation on Internal Processor Caches
...
The cache coherency mechanism automatically prevents two or more processors that have cached the same area of memory from simultaneously modifying data in that area.
这是否意味着 lock
操作码前缀对应用程序编程没有用?
CPU 缓存始终打开,所有应用程序可访问的内存都是可缓存的,因此缓存一致性机制始终保持警惕,以保护存储在共享内存中的数据的完整性。
"Cache coherency mechanism" 是多核 CPU 缓存的固有部分,它始终独立于您是否使用 lock
前缀。
更详细的问题:
我有 Core2Duo CPU,我的应用程序在 2 个并行线程中运行,使用公共全局变量。
在 lock add [ESI],EAX
和 lock cmpxchg8b [ESI]
等指令中跳过 lock
前缀对我来说安全吗?
不,如果没有 LOCK 前缀,缓存锁将不会在整个 read/modify/write 操作中保持。这意味着该操作不会对其他处理器显示为原子操作。 LOCK 前缀还强制执行严格的内存排序,而不是通常使用的更宽松的强内存排序。
英特尔手册说:
8.1.4 Effects of a LOCK Operation on Internal Processor Caches
...
The cache coherency mechanism automatically prevents two or more processors that have cached the same area of memory from simultaneously modifying data in that area.
这是否意味着 lock
操作码前缀对应用程序编程没有用?
CPU 缓存始终打开,所有应用程序可访问的内存都是可缓存的,因此缓存一致性机制始终保持警惕,以保护存储在共享内存中的数据的完整性。
"Cache coherency mechanism" 是多核 CPU 缓存的固有部分,它始终独立于您是否使用 lock
前缀。
更详细的问题:
我有 Core2Duo CPU,我的应用程序在 2 个并行线程中运行,使用公共全局变量。
在 lock add [ESI],EAX
和 lock cmpxchg8b [ESI]
等指令中跳过 lock
前缀对我来说安全吗?
不,如果没有 LOCK 前缀,缓存锁将不会在整个 read/modify/write 操作中保持。这意味着该操作不会对其他处理器显示为原子操作。 LOCK 前缀还强制执行严格的内存排序,而不是通常使用的更宽松的强内存排序。