std::atomic<bool>
时间: 2023-07-19 15:49:20 浏览: 47
std::atomic<bool>是一个C++头文件<atomic>中的模板类,代表了一个原子类型的bool变量。原子类型指的是对该变量的读写操作是不可分割的,即它们要么全部完成,要么全部未完成。这种类型的变量是线程安全的,可以在多线程程序中用于共享状态的同步。因为多线程程序中的共享变量可能会出现竞态条件(race condition),即多个线程同时访问一个变量时可能导致不可预期的结果,使用std::atomic<bool>可以保证对该变量的读写操作是安全的。例如,可以使用std::atomic<bool>来实现一个线程安全的标志位,用于控制多个线程的执行流程。
相关问题
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变量的操作是原子的。