std::atomic_bool用法详解

std::atomic_bool用法详解

std::atomic_bool 是 C++ 标准库中的一个原子类型,它用于表示一个原子布尔值。原子类型是一种特殊的数据类型,可以在多线程环境中实现无锁操作,避免数据竞争和同步问题。std::atomic_bool 是 std::atomic 的一个特化,提供了原子操作布尔值的接口。
以下是 std::atomic_bool 的一些常见用法:
1.初始化:

1
std::atomic_bool flag(false); // 初始化为 false

这将创建一个名为 flag 的原子布尔值并将其初始化为 false。
2.读取值:
1
bool currentValue = flag.load(); // 读取原子布尔值

load() 方法以原子方式读取 flag 的当前值。这可以确保在多线程环境中读取值时不会发生数据竞争。
3.设置值:
1
flag.store(true); // 设置原子布尔值为 true

store() 方法以原子方式设置 flag 的值。这可以确保在多线程环境中设置值时不会发生数据竞争。
4.原子比较和交换(Compare-and-swap):
1
2
3
bool expected = false;
bool desired = true;
bool result = flag.compare_exchange_weak(expected, desired);

compare_exchange_weak() 方法比较 flag 的当前值与 expected 值。如果它们相等,该方法会将 flag 设置为 desired 值,并返回 true。如果它们不等,则返回 false,并将 expected 更新为 flag 的当前值。这个操作是原子的,因此在多线程环境中也是安全的。
5.原子操作符:
1
bool oldValue = flag.exchange(true); // 将原子布尔值设置为 true 并返回旧值

exchange() 方法将 flag 的值设置为指定值,并返回其原始值。这个操作也是原子的。

使用 std::atomic_bool 可以方便地在多线程环境中实现无锁操作,避免使用互斥锁带来的性能损失。然而,需要注意的是,原子操作虽然高效,但并非所有场景都适用。在某些情况下,互斥锁和其他同步原语可能更合适。


std::atomic_bool用法详解
https://qiangsun89.github.io/2023/04/11/std-atomic-bool用法详解/
作者
Qiang Sun
发布于
2023年4月11日
许可协议