【发布时间】:2013-10-06 10:16:19
【问题描述】:
x86 指令 LOCK XCHG 和 MOV+MFENCE 用于执行顺序一致性存储的逻辑和性能有何不同。
(我们忽略了XCHG的加载结果;gcc以外的编译器使用它来实现存储+内存屏障的效果。)
为了顺序一致性,在执行原子操作期间是否:LOCK XCHG 仅锁定单个缓存行,反之亦然MOV+MFENCE 锁定整个缓存 L3(LLC)?
【问题讨论】:
-
苹果和橙子,MFENCE 不提供原子性。
-
@Hans Passant 我没有说 MFENCE 提供原子性,因为 MOV 已经是原子的 - 我们可以在 C11(
atomic)/C++11(std::atomic) 中看到所有订购在 x86 中,除了 SC(顺序一致性):en.cppreference.com/w/cpp/atomic/memory_order 但我说 MFENCE 为原子变量提供顺序一致性,正如我们在 C11(atomic)/C++11(std::atomic中看到的那样) 在 GCC4.8.2 中:stackoverflow.com/questions/19047327/… -
(顺便说一句,我什至不确定
mov是否是非对齐访问的原子。) -
@Kerrek SB
MOV+MFENCE(GCC4.8.2 中的 SC)我们可以将LOCK XCHG替换为 SC,正如我们在视频中看到的那样,0:28:20说MFENCE比XCHG贵:channel9.msdn.com/Shows/Going+Deep/… -
@Alex,也可以在这里查看 - stackoverflow.com/questions/19059542/…
标签: multithreading assembly concurrency x86 cpu-cache