C ++-标准的原子布尔值和原子标记之间的区别

我不了解2992280211821121167616变量,但了解该标准提供的29922802118211676676(怪异的权利!)。 然而,有一件事引起了我的注意:标准提供了两种看似相同的原子类型,以下列出:

  1. std::atomic bool type类型

  2. std::atomic bool type type

还以2992280211821167667616的示例为例-

std :: atomic_flag是原子布尔类型。 与std :: atomic的所有专业不同,它保证是无锁的。 与std :: atomic不同,std :: atomic_flag不提供加载或存储操作。

我不明白。 是否不能保证29922802118211676676是无锁的? 那不是原子的还是什么?

那么两者之间有什么区别,什么时候应该使用?

hg_git asked 2020-08-01T14:19:47Z
2个解决方案
29 votes

std :: atomic bool类型不能保证无锁吗?

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

那不是原子的还是什么?

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

那么b / w两个有什么区别

除了无锁保证外,主要区别在于:

std::atomic<bool>不提供加载或存储操作。


我应该什么时候使用?

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

eerorika answered 2020-08-01T14:20:37Z
24 votes

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

另一方面,可以确保使用无锁技术来实现std::atomic_flag

michalsrb answered 2020-08-01T14:21:01Z
translate from https://stackoverflow.com:/questions/39329311/difference-between-standards-atomic-bool-and-atomic-flag