atomic 原子类型是对特定类型(T)对象的一种封装,可以防止数据竞争,同步多线程间的内存访问。
原子对象能够通过指定不同的内存顺序来同步对线程中其他非原子对象的访问。
相关函数:
atomic() noexcept = default; // 默认构造函数,构造一个未初始化的对象
constexpr atomic(T val) noexcept; // 初始化构造函数,构造一个用val初始化的原子对象
atomic(const atomic&) = delete; // 禁用拷贝构造函数
atomic& operator = (const atomic&) = delete; // 禁用赋值操作函数
T operator = (T val) noexcept; // 使用指定值进行赋值
is_lock_free() // 判断原子对象是否lock-free状态
store(T val) //用设定值替换当前值,该操作是原子性的
load(memory_order sync = memory_order_seq_cst) //返回当前值,该操作是原子性的
operator T() // 返回当前值,这是一个类型转换符,取出原子对象中类型为T的值
exchange(T val) // 用设定值替换当前值,并返回当前值
compare_exchange_weak(T& expected, T val, memory_order sync = memory_order_seq_cst)
compare_exchange_strong(T& expected, T val, memory_order sync = memory_order_seq_cst)
// 当前值与期望值相等时,修改当前值为设定值,返回true; 当前值与期望值不等时,不进行修改,返回false
// weak与strong的差别在于weak可能在满足当前值与期望值相等的情况下仍然返回false