问题描述
https://en.cppreference.com/w/cpp/atomic/atomic
std::atomic 成员函数只能获取修改前的值, 但我想知道如何以原子方式获取修改后的值
为什么 std::atomic 模板不提供 sub_fetch() 之类的函数?
解决方法
确实如此。它叫做operator-=
。
std::atomic<int> i(5);
int f = i -= 5;
std::cout << f << "\n"; // 0
-=
是您为非原子对象编写此操作的方式,因此 std::atomic
使用相同的运算符。 fetch_*
操作打破常规,因为正常值没有这些操作,但原子操作有。因为他们没有可用的运算符,所以他们必须有字母名称。