Multithreading 是";锁;操作码前缀因“而无效”;缓存一致性机制;?

Multithreading 是";锁;操作码前缀因“而无效”;缓存一致性机制;?,multithreading,assembly,concurrency,x86,cpu-cache,Multithreading,Assembly,Concurrency,X86,Cpu Cache,英特尔手册上说: 8.1.4锁定操作对内部处理器缓存的影响 … 缓存一致性机制自动防止已缓存同一内存区域的两个或多个处理器同时修改该区域中的数据 这是否意味着lock操作码前缀对应用程序编程没有用处 CPU缓存始终处于打开状态,并且所有应用程序可访问的内存都是可缓存的,所以缓存一致性机制始终处于警戒状态,以保护存储在共享内存中的数据的完整性 “缓存一致性机制”是多核CPU缓存的固有部分,它始终独立于您是否使用lock前缀而工作 更详细的问题: 我有Core2Duo CPU,我的应用程序在两个并行

英特尔手册上说:

8.1.4锁定操作对内部处理器缓存的影响

缓存一致性机制自动防止已缓存同一内存区域的两个或多个处理器同时修改该区域中的数据

这是否意味着
lock
操作码前缀对应用程序编程没有用处

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

“缓存一致性机制”是多核CPU缓存的固有部分,它始终独立于您是否使用
lock
前缀而工作

更详细的问题:
我有Core2Duo CPU,我的应用程序在两个并行线程中运行,使用通用全局变量。

跳过指令中的
lock
前缀是否安全,如
lock add[ESI]、EAX
lock cmpxchg8b[ESI]

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

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

不,省略它是不安全的。缓存一致性不会使指令原子化。例如,一致性机制仅防止核心A的L1拥有缓存线的缓存副本,该缓存线的数据与核心B的L1不同。要补充罗斯的答案,请注意,
add[esi],eax实际上是一个加载、添加和存储。不,省略它是不安全的。缓存一致性不会使指令原子化。例如,一致性机制仅防止核心A的L1拥有缓存线的缓存副本,该缓存线的数据与核心B的L1不同。要补充罗斯的答案,请注意,
add[esi],eax实际上是一个加载、添加和存储。