标准的 atomic bool 和 atomic flag 之间的区别
difference between standard's atomic bool and atomic flag
我不知道 std::atomic
变量,但知道标准提供的 std::mutex
(真奇怪!);然而有一件事引起了我的注意:标准提供了两种看似相同(对我而言)的原子类型,如下所列:
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
是一个低级结构,可用于实现自定义原子结构。
我不知道 std::atomic
变量,但知道标准提供的 std::mutex
(真奇怪!);然而有一件事引起了我的注意:标准提供了两种看似相同(对我而言)的原子类型,如下所列:
std::atomic_flag
包含以下解释:
std::atomic_flag
is an atomic boolean type. Unlike all specializations ofstd::atomic
, it is guaranteed to be lock-free. Unlikestd::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
是一个低级结构,可用于实现自定义原子结构。