首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以使用std::stop_source延迟取消工作线程中的所有工作线程吗?

我可以使用std::stop_source延迟取消工作线程中的所有工作线程吗?
EN

Stack Overflow用户
提问于 2021-05-21 12:57:43
回答 1查看 164关注 0票数 2

我有两个线程并行运行,从主线程开始。任何一个线程都可能失败。如果它这样做了,我想要求另一个线程也取消。在C++ 20中有std::stop_tokenstd::stop_source。我发现了几个主线程要求所有线程取消(延迟取消)的例子。但是,我还没有找到任何示例,其中任何一个工作线程都可能延迟,取消所有其他工作线程。这是怎么做的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-21 14:55:45

为了使代码的位置能够请求停止,该位置必须有一个std::stop_source。为了使代码位置能够响应停止,必须从特定的std::stop_token中提取一个stop_source

因此,为了使代码位置能够同时请求和响应停止,它必须同时拥有stop_sourcestop_token

现在,由于stop_sources能够生成stop_token,所以您没有理由不能仅仅给线程函数一个stop_source并让它从中提取一个令牌。当然,这将无法使用std::jthread的方便性来检测第一个参数为stop_token并生成stop_source的线程函数,但停止需求的本质并不能使其可行。

另外,请记住,stop_source是可复制的;副本都共享相同的内部停止状态(以及从它们创建的任何stop_token)。所以没有理由引用它们。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67637326

复制
相关文章

相似问题

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