为什么 std::atomic<T> 模板不提供 sub_fetch() 成员函数?
Why std::atomic<T> Template don't provide sub_fetch() member function?
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_*
操作是对规范的突破,因为普通值没有这些操作,但原子值有。因为它们没有可用的运算符,所以它们必须有字母名称。
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_*
操作是对规范的突破,因为普通值没有这些操作,但原子值有。因为它们没有可用的运算符,所以它们必须有字母名称。