阅读量:0
在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()函数时,通常需要先获取互斥锁来保护共享资源,以防止多个线程同时修改共享资源导致数据竞争的问题。