目录

定义和功能

成员类型

成员函数 

特化成员函数


定义和功能

头文件<atomic>

template< class T >
struct atomic;

(1)

(C++11 起)

template< class U >
struct atomic<U*>;   //定义于头文件<memory>

(2)

(C++11 起)

template<class U>
struct atomic<std::shared_ptr<U>>;

(3)

(C++20 起)

template<class U>
struct atomic<std::weak_ptr<U>>;

(4)

(C++20 起)

每个 std::atomic 模板的实例化和全特化定义一个原子类型。若一个线程写入原子对象,同时另一线程从它读取,则行为良好定义。

另外,对原子对象的访问可以建立线程间同步,并按 std::memory_order 对非原子内存访问定序。

std::atomic 既不可复制亦不可移动。

成员类型

value_type

T (无论是否特化)

difference_type

value_type (仅对 atomic<Integral> 和 atomic<Floating> (C++20 起) 特化)

std::ptrdiff_t(仅对 atomic<U*> 特化)

成员函数 

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)