C++ 我可以使用std::stop_source延迟取消工作线程中的所有工作线程吗?
我有两个线程从主线程开始并行运行。 任何一个线程都可能失败。如果它这样做了,我想要求其他线程也取消。 在C++ 20中,有<代码> STD::StutoToMs和C++ 我可以使用std::stop_source延迟取消工作线程中的所有工作线程吗?,c++,multithreading,c++20,C++,Multithreading,C++20,我有两个线程从主线程开始并行运行。 任何一个线程都可能失败。如果它这样做了,我想要求其他线程也取消。 在C++ 20中,有 STD::StutoToMs和 STD::StestOffels。 我发现了几个主线程要求所有线程取消(延迟取消)的示例。 但是,我没有发现任何一个工作线程可以延迟取消所有其他工作线程的示例。 如何做到这一点?为了使代码位置能够请求停止,该位置必须具有std::stop\u源。为了使代码位置能够响应停止,它必须具有从特定的stop\u源获取的std::stop\u令牌 因此
如何做到这一点?为了使代码位置能够请求停止,该位置必须具有
std::stop\u源。为了使代码位置能够响应停止,它必须具有从特定的stop\u源
获取的std::stop\u令牌
因此,为了使代码位置能够请求和响应停止,它必须同时具有stop\u源
和stop\u令牌
现在,由于stop\u source
s能够生成stop\u令牌
s,因此没有理由不给线程函数一个stop\u source
并让它从中提取令牌。当然,这将无法使用std::jthread
的便利功能来检测第一个参数是stop_令牌的线程函数,并生成stop_源代码,但停止需求的性质无论如何都不会使其可行
另外,请记住,stop\u source
是可复制的;所有副本都共享相同的内部停止状态(以及从它们创建的任何stop\u令牌)。所以没有理由通过引用来传递它们