C++原子变量atomic

253 阅读1分钟

1. 是什么:

C++中的原子变量(atomic)是一种多线程中常用的同步机制, 它能够确保对共享变量的操作在执行时不会被其他线程的操作干扰, 从而避免竞态条件(rare condition)和死锁(deadlock)问题。

原子变量可以看做是一种特殊的类型, 外部调用者使用时可以按照普通变量操作, 但是内部却能保证这些操作是原子级别的,即要么全部完成,要么全部不完成。

std::atomic< T> 是一个模板,可以支持多种数据类型。

2. 怎么用:

// 构造函数:
std::atomic<int> ref_count_;
    
// 检查当前函数是否支持无锁操作:
bool is_lock_free();    
ref_count_.is_lock_freee();
    
// 将给定的值存储到原子对象中:
void store(T desired, order);
ref_count_.store(10);
    
// 获取原子变量的当前值:
T load();
ref_count_.load();
    
// 算数操作:    
fetch_add(n);    // 加法
fetch_sub(n);    // 减法
fetch_and(b);     // 与
fetch_or(b);      // 或
fetch_xor(b);     // 异或

ref_count_.fetch_add(1); // 等效于 ref_count_++;
ref_count_.fetch_sub(1); // 等效于 ref_count_--;

3. 实现原理:

TODO