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