使用条件变量通知线程工作
时间: 2023-05-14 10:06:50 浏览: 163
非常好的问题!使用条件变量可以让线程在特定条件下等待或者继续执行。在C++中,可以使用std::condition_variable类来实现条件变量。下面是一个简单的示例代码:
```
#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> lock(mtx);
while (!ready) {
cv.wait(lock);
}
// 条件满足,执行任务
std::cout << "Worker thread is working!" << std::endl;
}
int main()
{
// 创建工作线程
std::thread worker(worker_thread);
// 主线程等待一段时间后通知工作线程
std::this_thread::sleep_for(std::chrono::seconds(2));
{
std::lock_guard<std::mutex> lock(mtx);
ready = true;
}
cv.notify_one();
// 等待工作线程完成
worker.join();
return 0;
}
```
在这个示例中,主线程等待2秒后通知工作线程开始执行。工作线程在等待条件变量时会阻塞,直到条件满足后才会继续执行。注意,在等待条件变量时需要使用std::unique_lock<std::mutex>来锁定互斥量,以避免竞态条件的发生。
阅读全文