[英]How do you use std::jthread::get_stop_token()?
我很困惑std::jthread::get_stop_token
是如何设计的,因为它似乎有一个固有的竞争条件。
即,执行线程不能简单地在其自身上调用std::jthread
(如本例所示),因为它不能保证std::jthread
object 在它开始执行时实际上已构建。 在我看来,一个线程要使用它自己的get_stop_token
,它需要(至少)一个额外的事件(比如std::latch
)来同步它自己的构造。
但是,我在网上没有看到任何有关此问题的示例或提及,因此在我看来,这可能不是预期的用途。 它确实看起来相当笨重且容易出错,并且可能效率低下,因为它需要工作线程在继续之前阻塞主线程。
那么get_stop_token
应该如何使用呢?
是否有一个简单的示例说明std::jthread::get_stop_token()
的正确预期用法?
从这里的示例中可以看出, get_stop_token
实际上并不打算由客户端代码使用。 它由std::jthread
在幕后调用,并传递给由std::jthread
。 看来这是必须完成的方式
#include <thread>
#include <iostream>
void f(std::stop_token stop_token, int value)
{
while (!stop_token.stop_requested()) {
}
}
int main()
{
std::jthread thread(f, 5);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.