- 此问题在此处已有答案**:
Why does a std::atomic store with sequential consistency use XCHG?(1个答案)
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个答案)
四年前关闭了。
x86指令LOCK XCHG
和MOV+MFENCE
在执行顺序一致性存储时,在逻辑和性能上有什么区别?
(We忽略XCHG
的加载结果;GCC以外的编译器使用它来实现存储+存储器屏障效应。
对于顺序一致性,在执行原子操作期间:LOCK XCHG
仅锁定单个缓存行,反之亦然MOV+MFENCE
锁定整个缓存-L3(LLC)?
1条答案
按热度按时间lhcgjxsq1#
区别在于使用目的。
MFENCE(或SFENCE或LFENCE)在我们锁定可从两个或更多线程访问的内存区域的一部分时非常有用。当我们原子地设置此内存区域的锁时,我们可以在此之后使用所有非原子指令,因为有更快的锁。但我们必须在解锁内存区域之前调用SFANCE(或MFENCE)一条指令,以确保锁定的内存对所有其他线程正确可见。
如果我们只改变一个内存对齐的变量,那么我们就使用像LOCK XCHG这样的原子指令,所以不需要内存区域的锁。