C++实现线程同步的notify_all

   2024-10-06 7630
核心提示:在C++中,可以使用std::condition_variable来实现线程同步的notify_all操作。以下是一个简单的示例代码:#include iostream#incl

在C++中,可以使用std::condition_variable来实现线程同步的notify_all操作。以下是一个简单的示例代码:

#include <iostream>#include <thread>#include <mutex>#include <condition_variable>std::mutex mtx;std::condition_variable cv;bool ready = false;void worker_func(int id) {    std::unique_lock<std::mutex> lock(mtx);    cv.wait(lock, []{ return ready; });    std::cout << "Worker " << id << " is working" << std::endl;}int main() {    std::thread workers[3];    for (int i = 0; i < 3; i++) {        workers[i] = std::thread(worker_func, i);    }    {        std::lock_guard<std::mutex> lock(mtx);        ready = true;    }    cv.notify_all();    for (int i = 0; i < 3; i++) {        workers[i].join();    }    return 0;}

在上面的代码中,我们创建了一个std::condition_variable对象cv来实现线程同步。在worker_func函数中,线程会等待在cv上,直到ready变量变为true,然后才会执行工作。在主函数中,我们使用std::lock_guard来保护ready变量的修改,并使用cv.notify_all()通知所有等待在cv上的线程可以继续执行了。最后,我们使用join()函数等待所有线程执行完毕。

希望这个例子可以帮助理解如何在C++中使用std::condition_variable来实现线程同步的notify_all操作。

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

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