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

时间:2014-07-23 12:02:08

标签: c gcc atomic memory-barriers

C++ and Beyond 2012: Herb Sutter - atomic<> Weapons, 2 of 2 Herb Sutter认为(大约0:38:20),应该使用xchg,而不是mov / mfence来实施atomic_store 86。他似乎也暗示这个特定的指令序列是每个人都同意的。但是,海湾合作委员会使用后者。为什么GCC使用这种特定的实现?

1 个答案:

答案 0 :(得分:3)

很简单,movmfence方法更快,因为它不会像xchg那样触发冗余内存读取,这需要时间。 x86 CPU保证了线程之间的写入严格排序,所以这就足够了。

注意一些非常旧的CPU在mov指令中有一个错误,这使得xchg成为必需但这是很久以前的事情,并且解决这个问题对于大多数用户来说不值得花费。 / p>

感谢@amdn获取有关旧Pentium CPU中的错误的信息,导致过去需要xchg