std::atomic_ref<T>::operator+=,-=

来自cppreference.com
< cpp‎ | atomic‎ | atomic ref
 
 
并发支持库
线程
(C++11)
(C++20)
this_thread 命名空间
(C++11)
(C++11)
(C++11)
协作式取消
互斥
通用锁管理
(C++11)
(C++11)
(C++11)
(C++11)
条件变量
(C++11)
信号量
闩与屏障
(C++20)
(C++20)
未来体
(C++11)
(C++11)
(C++11)
安全回收
风险指针
原子类型
(C++11)
(C++20)
原子类型的初始化
(C++11)(C++20 弃用)
(C++11)(C++20 弃用)
内存定序
(C++11)(C++26 弃用)
原子操作的自由函数
原子标志的自由函数
 
 
仅当 Tcvbool 以外的算术类型或指向对象的指针类型时提供
value_type operator+=( difference_type arg )constnoexcept;
(1) (C++26 起为 constexpr)
value_type operator-=( difference_type arg )constnoexcept;
(2) (C++26 起为 constexpr)

原子地以涉及先前被 *ptr 引用的值和 arg 的运算的结果替换被引用对象的当前值。这些操作是读修改写操作。

1)operator+= 进行原子加法。等价于 return fetch_add(arg)+ arg;
2)operator-= 进行原子减法。等价于 return fetch_sub(arg)- arg;
  • 对于有符号整数类型,定义算术为使用补码进行。不会有未定义的结果。
  • 对于浮点类型,生效的浮点环境可能异于调用方线程的浮点环境。不需要操作服从对应的 std::numeric_limits 特性,但鼓励这么做。如果结果无法以它的类型表示,那么结果未指定,但操作不会另有未定义行为。
  • 对于指针类型,结果可以是未定义的地址,但操作不会另有未定义行为。

这些重载只有在 std::is_const_v<T>false 时才会参与重载决议。

目录

[编辑]参数

arg - 算术运算的实参

[编辑]返回值

结果值(即对紧接对应的成员函数生效之前的被 *ptr 引用的值应用对应的二元运算符的结果)。

[编辑]注解

与大多数复合赋值运算符不同,atomic_ref 的复合赋值运算符并不返回到 arg 的引用,而是返回存储的值的副本。

[编辑]示例

[编辑]缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

缺陷报告 应用于 出版时的行为 正确行为
LWG 3508
(P3323R1)
C++20 复合赋值运算符对 const T 无意义 受约束以仅接受非 const 的 T

[编辑]参阅

原子地将实参加到存储于被引用对象的值上,并获得先前保有的值
(公开成员函数)[编辑]
原子地从存储于被引用对象的值中减去实参,并获得先前保有的值
(公开成员函数)[编辑]
原子地将被引用对象增加或减少一
(公开成员函数)[编辑]
原子地和被引用值进行逐位与、或、异或
(公开成员函数)[编辑]
close