C++ GCC4.4.6中的原子变量非常慢
我使用的是GCC4.4.6,原子可以通过C++ GCC4.4.6中的原子变量非常慢,c++,C++,我使用的是GCC4.4.6,原子可以通过#include访问。使用后,我意识到它们非常非常慢。最后,我看到了一篇关于stackoverflow的帖子,在这里对其进行了描述 但我无法理解。有人能帮我理解这篇文章或解释为什么gcc4.4.6中的原子学如此缓慢吗?我相信gcc-4.4在支持原子学的早期就已经存在了。gcc中的原子最近在gcc-4.7中进行了修改。我相信这是不同硬件目标能够使用特定于硬件的高效内置功能的第一个版本。gcc-4.8中提供了libatomic。在4.7和4.8的过程中,各种平
#include
访问。使用后,我意识到它们非常非常慢。最后,我看到了一篇关于stackoverflow的帖子,在这里对其进行了描述
但我无法理解。有人能帮我理解这篇文章或解释为什么gcc4.4.6中的原子学如此缓慢吗?我相信gcc-4.4在支持原子学的早期就已经存在了。gcc中的原子最近在gcc-4.7中进行了修改。我相信这是不同硬件目标能够使用特定于硬件的高效内置功能的第一个版本。gcc-4.8中提供了libatomic。在4.7和4.8的过程中,各种平台升级了其原子学支持。本文解释了使用原子时各种内存模型的一些优化权衡
基本上,gcc-4.4有点早。IIRC甚至原子的标准规范也在gcc-4.7中不断变化。我使用了4.6.3中的
\uuuu sync.*
函数,没有注意到任何明显的缓慢,生成的汇编代码也没有显示任何异常。我刚刚更新了我的项目,该项目过去使用\uuuu sync\u fetch\u和
来使用std::atomic::fetch\u add()
——尽管它不经常调用原子函数,但我的代码在单线程或多线程运行的代码中没有显示出任何差异。因此,我同意前面的答案:获得一个更新的gcc
,它应该会自行修复 我不知道
(新的C11原子功能),但GCC4.4中对C++11的支持通常不是很成熟。我猜C11也是这样,因为他们不使用无锁指令。正如链接问题的答案所说,升级到4.7