所以我想等到ender开始在这里等待,基本上是这样的:
std::condition_variable avalanche;
std::mutex mutex;
std::cout << "avalanche" << std::endl;
std::thread ender{[&]{
std::unique_lock lock{mutex};
avalanche.wait(lock);
}};
//Here how to wait until ender has started waiting on the
//Conditional Variable我就是不能把头绕在这上面。
我的最终目标是创建一堆线程,这些线程将自己完成一些工作,然后按照创建的顺序继续进行。
发布于 2022-01-28 06:25:21
如果我正确地理解了您的问题,我的解决方案是使用另一个同步组件,让外部线程等待通过这个组件发送信号。
如果您想让外部线程等待直到ender开始等待,则应该让外部线程在相同的mutex上等待(直到ender通过wait释放锁,外层就可以获得锁)。虽然这被认为是悲观的(在执行notify工作时,不应该让通知线程持有锁),但我只是关注您的小示例,没有多少上下文承认实际情况。
std::condition_variable avalanche;
std::mutex mutex;
std::cout << "avalanche" << std::endl;
std::thread ender{[&]{
std::unique_lock<std::mutex> lock{mutex};
avalanche.notify_all();
avalanche.wait(lock);
}};
{
// lock scope
std::unique_lock<std::mutex> lock{mutex};
avalanche.wait(lock);
}
// do somethinghttps://stackoverflow.com/questions/70888646
复制相似问题