第31课 std::atomic原子变量
一. std::atomic_flag和std::atomic (一)std::atomic_flag 1. std::atomic_flag 是一个bool类型的原子变量,它有两个状态set和clear,对应着flag为true和false。 2. std::atomic_flag使用前必须被 ATOMIC_FLAG_INIT 初始化,此时的flag为clear状态,相当于静态初始化。 3. 三个原子化操作 (1) test_and_set() :检查当前flag是否被设置。 若己设置直接返回true,若没设置则将flag置为true ,并返回false 。 (2) clear() ;清除flag标志,即flag=false。 (3)析构函数 4. 和所有atomic类型一样, std::atomic_flag不支持拷贝和赋值等操作 。因为赋值和拷贝调用了两个对象,从第一个对象中读值,然后再写入另一个。对于两个独立的对象,这里就有两个独立的操作,合并这两个操作必定不是原子的。 5. std::atomic_flag 类型不提供is_lock_free()。 该类型是一个简单的布尔标志, 并且 在这种类型上的操作都是无锁的 。但atomic_flag的可操作性不强,导致其应用局限性,还不如std::atomic<boo>。 (二)std: