C++ notify_all如何使用

   2024-10-06 8450
核心提示:在C++中,notify_all()函数通常是和条件变量一起使用的。条件变量(condition variable)是用于线程间通信的一种机制,它允许一个

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

 
举报打赏
 
更多>同类物流大全
推荐图文
推荐物流大全
点击排行

网站首页  |  关于我们  |  联系方式 | 网站留言    |  赣ICP备2021007278号