【发布时间】:2021-04-22 08:05:53
【问题描述】:
我对 std::jthread::get_stop_token 的工作原理感到困惑,因为它似乎具有固有的竞争条件。
也就是说,执行线程不能简单地对自己调用std::jthread(如this example),因为它不能保证std::jthread 对象在它开始执行时实际上是构造好的。在我看来,一个线程要使用它自己的get_stop_token,它需要(至少)一个额外的事件(如std::latch)来同步它自己的构造。
但是,我在网上没有看到任何有关此问题的示例或提及,因此在我看来,这可能不是预期的用途。它确实看起来相当笨重且容易出错,并且可能效率低下,因为它需要工作线程在继续之前阻塞主线程。
那么get_stop_token应该如何使用呢?
有没有一个简单的例子来说明std::jthread::get_stop_token() 的正确预期用法?
【问题讨论】:
-
在我看来,它用于在请求停止时知道线程外。例如在第三个线程中:)
标签: c++ synchronization c++20 cancellation stdthread