在C++ and Beyond 2012: Herb Sutter - atomic<> Weapons, 2 of 2 Herb Sutter认为(大约0:38:20),应该使用xchg
,而不是mov
/ mfence
来实施atomic_store
86。他似乎也暗示这个特定的指令序列是每个人都同意的。但是,海湾合作委员会使用后者。为什么GCC使用这种特定的实现?
答案 0 :(得分:3)
很简单,mov
和mfence
方法更快,因为它不会像xchg
那样触发冗余内存读取,这需要时间。 x86 CPU保证了线程之间的写入严格排序,所以这就足够了。
注意一些非常旧的CPU在mov
指令中有一个错误,这使得xchg
成为必需但这是很久以前的事情,并且解决这个问题对于大多数用户来说不值得花费。 / p>
感谢@amdn获取有关旧Pentium CPU中的错误的信息,导致过去需要xchg
。