在C ++及2012年之后的版本中:Herb Sutter-atomic <>武器,每2个中就有2个Herb Sutter认为(大约0:38:20)应该在x86上使用xchg
而不是mov
/mfence
来实现atomic_store
。他似乎还暗示,这一特定的指令顺序是每个人都同意的。但是,GCC使用后者。为什么GCC使用此特定实现?
简而言之,mov
andmfence
方法更快,因为它不会触发xchg
需要花费时间的冗余内存读取。x86 CPU始终保证线程之间的写入严格排序,因此足够了。
请注意,某些非常老的CPU在mov
指令中存在一个错误,这是xchg
有必要的,但这是从很久以前开始的,解决此问题对大多数用户而言不值得。
感谢@amdn以获取有关xchg
过去需要使用的旧奔腾CPU中的错误的信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句