繁体   English   中英

你如何使用 std::jthread::get_stop_token()?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM