# std::atomic_store, std::atomic_store_explicit

< cpp‎ | atomic

定义于头文件 `<atomic>` |  |
| (1) | (C++11 起)
template< class T > void atomic_store( std::atomic<T>* obj, typename std::atomic<T>::value_type desr ) noexcept; |  |
template< class T > void atomic_store( volatile std::atomic<T>* obj, typename std::atomic<T>::value_type desr ) noexcept; |  |
| (2) | (C++11 起)
template< class T > void atomic_store_explicit( std::atomic<T>* obj, typename std::atomic<T>::value_type desr, std::memory_order order) noexcept; |  |
template< class T > void atomic_store_explicit( volatile std::atomic<T>* obj, typename std::atomic<T>::value_type desr, std::memory_order order) noexcept; |  |

1) 如同用 obj->store(desr) 原子地以 `desr` 的值替换 `obj` 所指向的值。
2) 如同用 obj->store(desr, order) 原子地以 `desr` 的值替换 `obj` 所指向的值。

### 参数

obj | - | 指向要修改的原子对象的指针
desr | - | 要存储于原子对象的值
order | - | 此操作所用的内存同步顺序：只容许 std::memory_order_relaxed 、 std::memory_order_release 和 std::memory_order_seq_cst 。

### 返回值

（无）

### 缺陷报告

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

DR | 应用于 | 出版时的行为 | 正确行为
--- | --- | --- | ---
P0558R1 | C++11 | 曾要求准确类型匹配，因为从多个参数推导 `T` | 仅从 `atomic` 参数推导 `T`

### 参阅

store | 原子地以非原子对象替换原子对象的值 (`std::atomic<T>` 的公开成员函数)
atomic_load atomic_load_explicit (C++11)(C++11) | 原子地获得存储于原子对象的值 (函数模板)
memory_order (C++11) | 为给定的原子操作定义内存顺序约束 (枚举)

std::atomic_store(std::shared_ptr) std::atomic_store_explicit(std::shared_ptr) (C++20 中弃用) | 为 std::shared_ptr 特化原子操作 (函数模板)