我有两个线程并行运行,从主线程开始。任何一个线程都可能失败。如果它这样做了,我想要求另一个线程也取消。在C++ 20中有std::stop_token和std::stop_source。我发现了几个主线程要求所有线程取消(延迟取消)的例子。但是,我还没有找到任何示例,其中任何一个工作线程都可能延迟,取消所有其他工作线程。这是怎么做的?
发布于 2021-05-21 14:55:45
为了使代码的位置能够请求停止,该位置必须有一个std::stop_source。为了使代码位置能够响应停止,必须从特定的std::stop_token中提取一个stop_source。
因此,为了使代码位置能够同时请求和响应停止,它必须同时拥有stop_source和stop_token。
现在,由于stop_sources能够生成stop_token,所以您没有理由不能仅仅给线程函数一个stop_source并让它从中提取一个令牌。当然,这将无法使用std::jthread的方便性来检测第一个参数为stop_token并生成stop_source的线程函数,但停止需求的本质并不能使其可行。
另外,请记住,stop_source是可复制的;副本都共享相同的内部停止状态(以及从它们创建的任何stop_token)。所以没有理由引用它们。
https://stackoverflow.com/questions/67637326
复制相似问题