c++ - 对原子获取和添加与获取和或的硬件支持

标签 c++ lock-free

似乎 fetch_add 是一个 win (也请参阅帖子评论)针对支持两者的 CPU 上的 CAS 循环。

在切换清除位以设置位时,您可以使用按位或或加法运算。结果将是相同的。我希望每个人的表现都是平等的。因此,决定使用哪种操作将取决于对操作的硬件支持差异(如果有的话,我没有找到任何关于相关处理器支持的信息。)

在这种情况下,有什么理由偏爱其中之一吗?

最佳答案

您可能想要做的不是为特定的处理器架构编码,而是使用编译器内部函数。 GCCClang ,例如,支持多个原子内置函数,其中之一是 __sync_fetch_and_or

自 Visual Studio 2005 起,Visual C++ 已支持 _InterlockedOr on all architectures .

关于c++ - 对原子获取和添加与获取和或的硬件支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8827667/

相关文章:

c++ - OpenCV Feature2D 类中 CV_WRAP 和 CV_OUT 的含义是什么

c# - 无锁列表帮助!

c++ - x86 内存排序测试显示英特尔手册中规定不应该进行重新排序?

c++ - 元素如何在 vector 中找到自己的索引?

c++ - OpenWrt 是否提供数据包过滤器 api?

c++ - 锁定自由链表插入

c++ - 奇怪的shared_ptr行为

c++ - const 对象的无锁重载和共享

c++ - '0'、 '\0' 和 0 与 sizeof() 和 strlen() 有什么区别?

c++ - 用 i++ 或++i 写循环