首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何等待和通知同时-条件变量?

如何等待和通知同时-条件变量?
EN

Stack Overflow用户
提问于 2022-01-28 03:57:53
回答 1查看 417关注 0票数 0

所以我想等到ender开始在这里等待,基本上是这样的:

代码语言:javascript
复制
        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

我就是不能把头绕在这上面。

我的最终目标是创建一堆线程,这些线程将自己完成一些工作,然后按照创建的顺序继续进行。

EN

回答 1

Stack Overflow用户

发布于 2022-01-28 06:25:21

如果我正确地理解了您的问题,我的解决方案是使用另一个同步组件,让外部线程等待通过这个组件发送信号。

如果您想让外部线程等待直到ender开始等待,则应该让外部线程在相同的mutex上等待(直到ender通过wait释放锁,外层就可以获得锁)。虽然这被认为是悲观的(在执行notify工作时,不应该让通知线程持有锁),但我只是关注您的小示例,没有多少上下文承认实际情况。

代码语言:javascript
复制
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 something
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70888646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档