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

来自cppreference.com
< cpp‎ | atomic‎ | atomic ref
 
 
并发支持库
线程
(C++11)
(C++20)
(C++20)
this_thread 命名空间
(C++11)
(C++11)
(C++11)
互斥
(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++26)
(C++26)
风险指针





原子类型
(C++11)
(C++20)
原子类型的初始化
(C++11)(C++20 中弃用)
(C++11)(C++20 中弃用)
内存定序
原子操作的自由函数
原子标志的自由函数
 
 
atomic<整数类型 > 特化和 atomic<浮点类型 > 特化才有的成员
T operator+=( T arg ) const noexcept;
(1) (C++20 起)
T operator-=( T arg ) const noexcept;
(2) (C++20 起)
atomic<T*> 部分特化才有的成员
T* operator+=( std::ptrdiff_t arg ) const noexcept;
(3) (C++20 起)
T* operator-=( std::ptrdiff_t arg ) const noexcept;
(4) (C++20 起)

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

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

参数

arg - 算术运算的实参

返回值

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

注解

与大多数复合赋值运算符不同,atomic_ref 的复合赋值运算符并不返回到其左侧实参的引用。它们代之以返回存储的值的副本。

示例

参阅

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