为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
相关产品推荐
相关产品推荐

