标准的 atomic bool 和 atomic flag 之间的区别

difference between standard's atomic bool and atomic flag

我不知道 std::atomic 变量,但知道标准提供的 std::mutex(真奇怪!);然而有一件事引起了我的注意:标准提供了两种看似相同(对我而言)的原子类型,如下所列:

  1. std::atomic<bool>

  2. std::atomic_flag

std::atomic_flag包含以下解释:

std::atomic_flag is an atomic boolean type. Unlike all specializations of std::atomic, it is guaranteed to be lock-free. Unlike std::atomic<bool>, std::atomic_flag does not provide load or store operations.

我没看懂。 std::atomic<bool>不保证是无锁的吗?那它不是原子的还是什么?

那么这两者有什么区别,我应该在什么时候使用哪个?

std::atomic<T> 保证对变量的访问是原子的。然而,它没有说明原子性是如何实现的。它可以使用无锁变量,也可以使用锁。实际实现取决于您的目标体系结构和类型 T.

另一方面,

std::atomic_flag 保证使用无锁技术实现。

std::atomic bool type not guranteed to be lock-free?

正确。 std::atomic 可以使用锁来实现。

then it's not atomic or what?

std::atomic 是原子的,无论是否使用锁实现。 std::atomic_flag保证在不使用锁的情况下实现。

So what's the difference b/w two

除了无锁保证之外的主要区别是:

std::atomic_flag does not provide load or store operations.


and when should I use which?

通常,当您需要一个原子布尔变量时,您会希望使用 std::atomic<bool>std::atomic_flag 是一个低级结构,可用于实现自定义原子结构。