为什么GCC使用mov/mfence而不是xchg来实现C11的atomic_store?

tib*_*bbe 11 c gcc atomic memory-barriers

C++和2012之后:Herb Sutter - 原子<>武器, Herb Sutter中的2个(约0:38:20)认为应该使用xchg,而不是mov/ 在x86 mfence上实现atomic_store.他似乎也暗示这个特定的指令序列是每个人都同意的.但是,海湾合作委员会使用后者.为什么GCC使用这个特定的实现?

Val*_*ity 3

很简单,movandmfence方法速度更快,因为它不会像 那样触发冗余内存读取,xchg这会花费时间。无论如何,x86 CPU 保证线程之间写入的严格顺序,因此这就足够了。

请注意,一些非常旧的 CPU 的mov指令中有一个错误,这是xchg必要的,但这是很久以前的事了,对于大多数用户来说,解决这个问题不值得花费精力。

xchg感谢 @amdn 提供有关旧 Pentium CPU 中导致过去需要的错误的信息。