#include <condition_variable> 是干什么的
时间: 2024-04-29 22:21:50 浏览: 12
`<condition_variable>` 是 C++11中提供的一个线程同步工具,可以用于线程之间的通信。它是一个条件变量,可以让一个或多个线程等待某个条件成立,当条件成立时,被等待的线程将被唤醒。通常情况下,`<condition_variable>` 配合 `std::mutex`和 `std::unique_lock` 一起使用,以实现线程之间的同步和协作。
在使用 `<condition_variable>` 进行线程同步时,我们通常会用 `std::unique_lock` 对互斥量进行加锁,然后调用 `wait()` 函数等待条件变量的通知。当条件变量发生变化时,我们可以调用 `notify_one()` 或 `notify_all()` 函数向等待的线程发送通知,唤醒它们继续执行。
例如,下面是一个使用 `<condition_variable>` 实现线程同步的示例:
```c++
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
std::mutex mtx;
std::condition_variable cv;
bool ready = false;
void worker_thread() {
// 等待主线程通知
std::unique_lock<std::mutex> lk(mtx);
cv.wait(lk, []{ return ready; });
// 执行任务
std::cout << "Worker thread is running!" << std::endl;
}
int main() {
// 创建一个工作线程
std::thread worker(worker_thread);
// 做一些工作
std::this_thread::sleep_for(std::chrono::seconds(1));
std::cout << "Main thread is doing some work!" << std::endl;
// 通知工作线程
{
std::lock_guard<std::mutex> lk(mtx);
ready = true;
}
cv.notify_one();
// 等待工作线程完成
worker.join();
std::cout << "Worker thread is done!" << std::endl;
return 0;
}
```
在上面的示例中,主线程创建了一个工作线程,然后等待1秒钟,之后通知工作线程开始执行任务。工作线程在等待条件变量的通知时被阻塞,当主线程通知它时,它被唤醒并开始执行任务。任务执行完毕后,主线程等待工作线程结束,然后程序退出。