C++ notify_all如何使用

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

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!