作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我很困惑 std::jthread::get_stop_token
旨在工作,因为它似乎具有固有的竞争条件。
即,执行线程不能简单地调用std::jthread
本身(如 this example ),因为它不能保证 std::jthread
对象实际上是在它开始执行时构造的。在我看来,线程使用自己的 get_stop_token
,它需要(至少)一个额外的事件(如 std::latch
)来同步它自己的构造。
但是,我在网上没有看到有关此问题的任何示例或提及,因此在我看来,这可能不是预期的用途。它看起来相当笨重且容易出错,并且可能效率低下,因为它需要工作线程在继续之前阻塞在主线程上。
那么如何get_stop_token
应该使用?
是否有一个简单的例子来说明 std::jthread::get_stop_token()
的正确、预期用途? ?
最佳答案
它出现在来自 here 的示例中那个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);
}
关于c++ - 你如何使用 std::jthread::get_stop_token() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67209211/
我很困惑 std::jthread::get_stop_token旨在工作,因为它似乎具有固有的竞争条件。 即,执行线程不能简单地调用std::jthread本身(如 this example ),因
我是一名优秀的程序员,十分优秀!