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

问题描述 投票:11回答:1

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

c gcc atomic memory-barriers
1个回答
3
投票

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

请注意,一些非常老的CPU在mov指令中有一个错误,这使得xchg成为必要,但这是很久以前的事情,并且解决这个问题并不值得大多数用户的开销。

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

© www.soinside.com 2019 - 2024. All rights reserved.