You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为std::jthread传入外部std::stop_token时,是否会阻止其创建内部std::stop_source?

关于std::jthread与外部std::stop_source的行为说明

当你向std::jthread的构造函数传入一个std::stop_token时,std::jthread不会创建自身私有内部的std::stop_source,它会直接绑定到传入的stop_token所关联的共享停止状态上。

具体行为解释

std::jthread的设计逻辑是:如果构造时没有提供外部stop_token,它才会默认创建一个私有的std::stop_source来管理自身的停止状态;一旦你显式传入了外部的stop_token,它就会复用该token对应的停止状态,不再初始化内部的std::stop_source。

这意味着你示例中的代码完全符合预期:

void thread_function(std::stop_token stoken)
{
  while (!stoken.stop_requested())
  {
    // 执行线程任务
  }
}

int main()
{
  std::stop_source ssource;  // 全局协调的停止源
  std::jthread t1(thread_function, ssource.get_token());
  std::jthread t2(thread_function, ssource.get_token());

  // ... 执行其他逻辑

  ssource.request_stop();  // 一次调用即可触发t1、t2的停止逻辑

  // ...
}

调用ssource.request_stop()后,t1和t2的stop_token都会检测到停止请求,进而退出循环。

额外说明

这种用法的核心优势在于可以统一管控多个线程的生命周期,避免为每个std::jthread单独处理停止信号,非常适合需要批量启停线程的场景。

内容的提问来源于stack exchange,提问作者manlio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 10:59:57