condition_variable调用notify_all()详解
时间: 2024-06-13 13:05:47 浏览: 160
condition_variable源码以及详细分析.docx
notify_all()是C++11中condition_variable类的一个成员函数,用于唤醒所有等待在该condition_variable对象上的线程。当一个线程调用notify_all()时,所有等待在该condition_variable对象上的线程都会被唤醒,但是只有一个线程能够获得锁并继续执行。如果没有线程等待在该condition_variable对象上,则该函数不会有任何作用。
使用notify_all()时需要注意以下几点:
1. 必须先获得与该condition_variable对象关联的unique_lock对象的锁,才能调用notify_all()函数。
2. 在调用notify_all()函数之前,必须先改变条件变量的状态,否则唤醒线程没有意义。
3. 被唤醒的线程需要重新检查条件变量的状态,以确定是否满足继续执行的条件。
下面是一个使用condition_variable和notify_all()的示例代码:
```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> lock(mtx);
while (!ready) {
cv.wait(lock);
}
// 执行任务
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::lock_guard<std::mutex> lock(mtx);
ready = true;
}
cv.notify_all();
// 等待工作线程完成
worker.join();
return 0;
}
```
阅读全文