函数
<atomic>

std::atomic_exchange

template (1)
template <class T> T atomic_exchange (volatile atomic<T>* obj, T val) noexcept;template <class T> T atomic_exchange (atomic<T>* obj, T val) noexcept;
重载 (2)
T atomic_exchange (volatile A* obj, T val) noexcept;T atomic_exchange (A* obj, T val) noexcept;
读取并修改包含的值
val 替换 obj 中包含的值,并返回 obj 在调用之前的旧值。

整个操作是原子的(一个*原子读-修改-写*操作):在读取 obj 的值(用于返回)和本函数修改它的时刻之间,obj 的值不会受到其他线程的影响。

有关 atomic::exchange 的成员函数,请参阅 atomic

参数

obj
指向 atomic 对象的指针。
类型 A 代表其他重载的 *原子类型* (如果库不实现 *C 风格原子类型* 作为 atomic 的实例)。
val
用于初始化包含对象的值。
T 是原子对象中包含的值的类型(atomic 的模板参数)。

返回值

obj 在调用之前包含的值。
T 是所包含值(atomic 的模板参数)的类型。

数据竞争

无数据竞争(原子操作)。该操作使用*顺序一致性*(memory_order_seq_cst)。

异常安全

无异常保证: 绝不抛出异常。

另见