似乎 fetch_add 是一个 win (也请参阅帖子评论)针对支持两者的 CPU 上的 CAS 循环。
在切换清除位以设置位时,您可以使用按位或或加法运算。结果将是相同的。我希望每个人的表现都是平等的。因此,决定使用哪种操作将取决于对操作的硬件支持差异(如果有的话,我没有找到任何关于相关处理器支持的信息。)
在这种情况下,有什么理由偏爱其中之一吗?
最佳答案
您可能想要做的不是为特定的处理器架构编码,而是使用编译器内部函数。 GCC和 Clang ,例如,支持多个原子内置函数,其中之一是 __sync_fetch_and_or
。
自 Visual Studio 2005 起,Visual C++ 已支持 _InterlockedOr
on all architectures .
关于c++ - 对原子获取和添加与获取和或的硬件支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8827667/