std::atomic<bool>
时间: 2023-09-24 11:12:14 浏览: 39
`std::atomic<bool>` 是一个原子布尔变量类型,用于多线程编程。原子变量是指可以在多线程环境下进行原子操作的变量,保证线程安全。在 C++11 中引入了 `std::atomic` 标准库,提供了一系列原子变量类型,包括布尔型、整型、指针等。在多线程编程中,使用原子变量可以避免数据竞争和死锁等问题。
相关问题
std::atomic<bool>使用
std::atomic<bool>是C++11标准库中提供的原子类型,用于实现多线程间的原子操作。它可以保证bool类型的赋值、读取等操作在多线程环境下的原子性。
使用std::atomic<bool>时,可以通过以下方式进行赋值和读取操作:
1. 赋值操作:
```
std::atomic<bool> flag(true);
flag.store(false); // 将flag的值赋为false
```
2. 读取操作:
```
std::atomic<bool> flag(true);
bool value = flag.load(); // 读取flag的值
```
此外,std::atomic<bool>还提供了一些其他的原子操作,如exchange、compare_exchange_weak/strong等。这些操作可以保证在多线程环境下对bool类型变量的操作是原子的。
std::atomic<bool>使用例子
以下是一个使用std::atomic<bool>的例子:
```
#include <iostream>
#include <thread>
#include <atomic>
std::atomic<bool> flag(false); // 全局的std::atomic<bool>变量
void thread_func()
{
while (!flag.load()) // 检测flag的状态
{
// do something
}
std::cout << "thread_func exits." << std::endl;
}
int main()
{
std::thread t(thread_func); // 创建一个新线程
// do something
flag.store(true); // 线程退出时设置flag的状态
t.join(); // 等待子线程退出
std::cout << "main exits." << std::endl;
return 0;
}
```
在上面的例子中,我们创建了一个全局的std::atomic<bool>变量flag,并在主线程中设置了它的状态为true。在子线程中,我们不断地检测flag的状态,直到它的状态被设置为true,此时子线程会退出。通过使用std::atomic<bool>,我们可以保证在多线程环境下对flag变量的操作是原子的。
阅读全文