看来fetch_add在支持这两种功能的CPU上战胜了CAS循环。
当将清除位切换为设置位时,可以使用逐位或加法运算。结果将完全相同。我希望每个人的表现都是一样的。因此,使用哪种操作的决定将取决于操作的硬件支持的差异(如果有的话,我没有找到任何关于相对处理器支持的信息。)
在这种情况下,有什么理由选择其中一个而不是另一个吗?
您可能想要做的不是为特定的处理器体系结构进行编码,而是使用编译器内部。例如,GCC和Clang支持几个原子内建,其中一个是__sync_fetch_and_or
。
自Visual Studio 2005以来,Visual C++在所有体系结构上都支持_InterlockedOr
。