Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我可以使用std::stop_source延迟取消工作线程中的所有工作线程吗?_C++_Multithreading_C++20 - Fatal编程技术网

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

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令牌 因此

我有两个线程从主线程开始并行运行。 任何一个线程都可能失败。如果它这样做了,我想要求其他线程也取消。 在C++ 20中,有<代码> STD::StutoToMs和 STD::StestOffels。 我发现了几个主线程要求所有线程取消(延迟取消)的示例。 但是,我没有发现任何一个工作线程可以延迟取消所有其他工作线程的示例。
如何做到这一点?

为了使代码位置能够请求停止,该位置必须具有
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令牌)。所以没有理由通过引用来传递它们