This question already has answers here:
Are loads and stores the only instructions that gets reordered?

(2 个回答)



Which is a better write barrier on x86: lock+addl or xchgl?

(5 个回答)



Does lock xchg have the same behavior as mfence?

(1 个回答)


2年前关闭。




x86 指令 LOCK XCHGMOV+MFENCE 在执行顺序一致性存储时在逻辑和性能上有什么区别。

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

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

最佳答案

区别在于使用目的。

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

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

关于multithreading - LOCK XCHG和MOV+MFENCE在逻辑和性能上有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19096112/

10-10 16:50