LOCK XCHG和MOV + MFENCE之间的逻辑和性能有何不同?

时间:2013-09-30 13:56:44

标签: multithreading assembly concurrency x86 cpu-cache

执行顺序一致性存储时,x86指令LOCK XCHGMOV+MFENCE之间的逻辑和性能有何不同。

(我们忽略XCHG的加载结果; gcc以外的编译器将其用于商店+内存屏障效果。)

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

1 个答案:

答案 0 :(得分:0)

不同之处在于使用目的。

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

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