我的理解是原子机器指令可能比非原子操作慢两个数量级。例如,给定
int x;
x++
和
std::atomic<int> y;
y++;
我的理解是,它x++
的运行速度通常比y++
. (我假设增量操作映射到底层机器指令。我确信确切的比较成本因架构而异,但我说的是经验法则。)
作为一般经验法则,我对原子 RMW 操作和非内联函数调用的相对成本感兴趣。例如,给定这个非内联函数,
void f(){}
与执行非内联调用的成本相比,我们通常可以说什么y++
(即原子增量)的成本f
?
我的动机是试图正确看待“原子操作比非原子操作昂贵得多”这一普遍说法。一种方法是尝试了解原子 RMW 操作与调用和从非内联函数返回相比有多昂贵。
请不要回答“唯一知道的方法就是测量”。我不是在询问原子 RMW 操作与特定架构上特定上下文中的函数调用。我问的是一个通用的经验法则,可以用作讨论的基础,供那些可能认为“我们永远不能使用原子指令,因为它们太贵”的人讨论,但谁不会三思而后行函数调用。