我不知道 std::atomic
变量,但知道标准提供的 std::mutex
(奇怪吧!然而,有一件事引起了我的注意:标准提供了两种看似相同的(对我来说)原子类型,如下所示:
>
std::atomic
d::atomic_flag
std::atomic_flag
包含以下解释:
< code>std::atomic_flag是原子布尔类型。与< code>std::atomic的所有专门化不同,它保证是无锁的。与< code>std::atomic不同
我不明白。< code >是标准::原子的吗
那么两者之间有什么区别,我应该什么时候使用哪个?
std::原子布尔类型不能保证是无锁的?
正确。std::atomic
可以使用锁来实现。
那么它不是原子的还是什么?
< code>std::atomic是原子的,无论它是否使用锁来实现。< code>std::atomic_flag保证在不使用锁的情况下实现。
那么,b/w两个有什么区别
除了无锁保证之外,主要区别在于:
std::atomic_flag
不提供加载或存储操作。
我应该什么时候使用哪个?
通常,您需要使用std::atomic
< code >标准::原子
std::atomic_flag
另一方面保证使用无锁技术实现。