gpt4 book ai didi

c++ - 等待多个线程通知的条件变量的正确方法

转载 作者:行者123 更新时间:2023-11-30 03:39:53 24 4
gpt4 key购买 nike

我正在尝试使用 C++11 并发支持来做到这一点。

我有一种工作线程线程池,它们都做同样的事情,其中​​主线程有一组条件变量(每个线程一个,它们需要“开始”同步,即不提前运行一个周期他们的循环)。

    for (auto &worker_cond : cond_arr) {
worker_cond.notify_one();
}

然后这个线程必须等待池中每个线程的通知才能重新开始它的循环。这样做的正确方法是什么?有一个条件变量并等待某个整数,每个不是主线程的线程都会增加?类似的东西(仍在主线程中)

    unique_lock<std::mutex> lock(workers_mtx);
workers_finished.wait(lock, [&workers] { return workers = cond_arr.size(); });

最佳答案

我在这里看到两个选项:

选项 1:join()

基本上不是使用条件变量来启动线程中的计算,而是为每次迭代生成一个新线程并使用 join() 等待它完成。然后为下一次迭代生成新线程,依此类推。

选项 2:锁

只要其中一个线程仍在工作,您不希望主线程发出通知。所以每个线程都有自己的锁,它在进行计算之前锁定并在之后解锁。您的主线程会在调用 notify() 之前锁定所有这些对象,然后再将它们解锁。

关于c++ - 等待多个线程通知的条件变量的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38488107/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com