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 指令
(我们忽略
对于顺序一致性,在执行原子操作期间:
(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 XCHG
和 MOV+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