目录
定义和功能
成员类型
成员函数
特化成员函数
定义和功能
头文件<atomic>
template< class T > | (1) | (C++11 起) |
template< class U > | (2) | (C++11 起) |
template<class U> | (3) | (C++20 起) |
template<class U> | (4) | (C++20 起) |
每个 std::atomic 模板的实例化和全特化定义一个原子类型。若一个线程写入原子对象,同时另一线程从它读取,则行为良好定义。
另外,对原子对象的访问可以建立线程间同步,并按 std::memory_order 对非原子内存访问定序。
std::atomic 既不可复制亦不可移动。
成员类型
|
|
|
std::ptrdiff_t(仅对 |
成员函数
is_lock_free | 检查原子对象是否免锁 |
store | 原子地以非原子对象替换原子对象的值 |
load | 原子地获得原子对象的值 |
exchange | 原子地替换原子对象的值并获得它先前持有的值(读-写) |
compare_exchange_weak compare_exchange_strong | 原子地比较原子与非原子参数的值,若相等则进行交换,若不相等则进行加载 |
wait(c++20) | 阻塞线程直到被提醒且原子值更改 |
notify_one(c++20) | 提醒至少一个在原子对象上的等待中阻塞的线程 |
notify_all(c++20) | 提醒所有在原子对象上的等待中阻塞的线程 |
std::atomic<T>::load定义
T load( std::memory_order order = std::memory_order_seq_cst ) const noexcept; | c++11起 |
T load( std::memory_order order = std::memory_order_seq_cst ) const volatile noexcept; |
原子地加载,并返回原子变量当前的值,按照order的值影响内存
order 必须是 std::memory_order_relaxed 、 std::memory_order_consume 、 std::memory_order_acquire 或 std::memory_order_seq_cst 之一。否则行为未定义。
std::atomic<T>::store定义
void store( T desired, std::memory_order order = std::memory_order_seq_cst ) noexcept; | c++11起 |
void store( T desired, std::memory_order order = std::memory_order_seq_cst ) volatile noexcept; |
原子地以desired的值替换当前值,按照order的值影响内存
order 必须是 std::memory_order_relaxed 、 std::memory_order_release 或 std::memory_order_seq_cst 之一。否则行为未定义。
特化成员函数
fetch_add | 原子地将参数加到存储于原子对象的值,并返回先前保有的值(public) |
fetch_sub | 原子地从存储于原子对象的值减去参数,并获得先前保有的值(public) |
fetch_and | 原子地进行参数和原子对象的值的逐位与,并获得先前保有的值(public) |
fetch_or | 原子地进行参数和原子对象的值的逐位或,并获得先前保有的值(public) |
fetch_xor | 原子地进行参数和原子对象的值的逐位异或,并获得先前保有的值(public) |