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