在C++中,notify_all()函数通常是和条件变量一起使用的。条件变量(condition variable)是用于线程间通信的一种机制,它允许一个线程等待另一个线程满足特定条件后再继续执行。
在使用notify_all()函数时,通常需要先创建一个条件变量对象和一个互斥锁对象,然后使用互斥锁保护共享资源,当某个线程改变了共享资源的状态时,可以调用notify_all()函数通知其他等待的线程。
以下是一个简单的示例代码来演示如何使用notify_all()函数:
#include <iostream>
#include <thread>
#include <condition_variable>
std::condition_variable cv;
std::mutex mtx;
bool ready = false;
void worker_thread() {
std::unique_lock<std::mutex> lck(mtx);
// 等待条件变量满足
cv.wait(lck, []{ return ready; });
// 条件满足后执行的操作
std::cout << "Worker thread is processing data." << std::endl;
}
int main() {
std::thread worker(worker_thread);
{
std::lock_guard<std::mutex> lck(mtx);
// 修改共享资源的状态
ready = true;
}
// 通知所有等待的线程条件已满足
cv.notify_all();
worker.join();
return 0;
}
在上面的示例中,worker_thread()函数通过等待条件变量的方式来等待条件满足,而在主线程中修改了ready变量的状态后,调用notify_all()函数通知worker_thread()线程条件已满足,从而执行后续操作。
需要注意的是,在使用notify_all()函数时,通常需要先获取互斥锁来保护共享资源,以防止多个线程同时修改共享资源导致数据竞争的问题。