fetch_add似乎是win(对于支持两者的CPU上的CAS循环,也见帖子评论)。
当切换清除位以设置位时,可以使用按位或加法运算。结果将是相同的。我希望每个人的表现都是平等的。因此决定使用哪种操作取决于操作的硬件支持的差异(如果有的话,我没有提供有关相关处理器支持的任何信息。)
在这种情况下,有理由更喜欢一个吗?
答案 0 :(得分:1)
您可能想要做的是使用编译器内在函数,而不是编码特定的处理器体系结构。例如,GCC和Clang支持几个原子内置函数,其中一个是__sync_fetch_and_or
。
自Visual Studio 2005以来,Visual C ++已支持_InterlockedOr
on all architectures。