4

LOCK XCHGx86 指令和MOV+MFENCE执行顺序一致性存储之间的逻辑和性能有什么区别。

(我们忽略XCHG; 的加载结果,而不是 gcc 的编译器将它用于存储 + 内存屏障效应。)

对于顺序一致性,在执行原子操作期间是否真的:LOCK XCHG仅锁定单个高速缓存行,反之亦然MOV+MFENCE锁定整个高速缓存 L3(LLC)?

4

1 回答 1

-1

区别在于使用目的。

当我们锁定可从两个或多个线程访问的内存区域的一部分时,MFENCE(或 SFENCE 或 LFENCE)很有用。当我们原子地为这个内存区域设置锁时,我们可以在之后使用所有非原子指令,因为有更快的指令。但是我们必须在解锁内存区域之前调用 SFANCE(或 MFENCE)一条指令,以确保锁定的内存对所有其他线程正确可见。

如果我们只更改单个内存对齐变量,那么我们使用的是 LOCK XCHG 之类的原子指令,因此不需要锁定内存区域。

于 2013-09-30T16:26:32.630 回答