新闻中心
c++20中的std::jthread有什么用_c++20中std::jthread线程使用方法与示例
std::jthread 能自动 join 且支持协作式中断,相比 std::thread 更安全易用。它在析构时自动等待线程结束,避免资源泄漏,并通过 std::stop_token 实现线程取消,简化了多线程编程中的生命周期管理和中断处理。

在C++20中,std::jthread 是对 std::thread 的改进和补充,主要解决了资源管理和线程自动回收的问题。相比传统的 std::thread,std::jthread 能够自动调用 join(),避免因忘记调用 join 或 detach 导致的程序崩溃或未定义行为。
std::jthread 的核心优势
std::jthread(joining thread)具备以下关键特性:
- 自动 join:析构时自动等待线程结束,无需手动调用 join()
- 可协作中断:支持通过 std::stop_token 和 std::stop_source 实现线程的协作式中断
- 更安全的接口:减少资源泄漏和未定义行为的风险
基本使用方法
创建一个 jthread 和使用 thread 类似,但无需手动管理生命周期。
#include <iostream>
#include <thread>
#include <chrono>
void simple_task() {
for (int i = 0; i < 3; ++i) {
std::cout << "Working... " << i << std::endl;
std::this_thread::sleep_for(std::chrono::milliseconds(500));
}
}
int main() {
std::jthread t(simple_task); // 自动 join
// 析构时会自动等待任务完成
return 0;
}
输出:
Working... 0Working... 1
Working... 2
支持线程中断的示例
std::jthread 最大的亮点是支持协作式中断。线程函数可以接收一个 std::stop_token,用于检测是否收到停止请求。
Pinokio
Pinokio是一款开源的AI浏览器,可以安装运行各种AI模型和应用
232
查看详情
#include <iostream>
#include <thread>
#include <chrono>
void cancellable_task(std::stop_token stoken) {
for (int i = 0; i < 10; ++i) {
if (stoken.stop_requested()) {
std::cout << "Task cancelled at step " << i << std::endl;
return;
}
std::cout << "Step " << i << std::endl;
std::this_thread::sleep_for(std::chrono::milliseconds(300));
}
std::cout << "Task completed normally." << std::endl;
}
int main() {
std::jthread t(cancellable_task);
std::this_thread::sleep_for(std::chrono::milliseconds(1200));
std::cout << "Requesting stop..." << std::endl;
t.request_stop(); // 发送停止请求
return 0;
}
输出可能为:
Step 0Step 1
Step 2
Step 3
Requesting stop...
Task cancelled at step 4
注意:线程函数必须接受 std::stop_token 作为第一个参数,否则无法响应中断请求。
获取 stop_token 并手动控制
你也可以在线程内部通过 get_stop_token() 获取 token,用于传递给其他函数。
void nested_task(std::stop_token stoken) {
while (!stoken.stop_requested()) {
std::cout << "Nested task running..." << std::endl;
std::this_thread::sleep_for(std::chrono::milliseconds(400));
}
}
void outer_task(std::stop_token stoken) {
nested_task(stoken);
}
基本上就这些。std::jthread 让多线程编程更安全、简洁,尤其适合需要自动清理和可取消任务的场景。不再需要担心忘记 join,也不必使用复杂机制实现中断,是 C++20 对并发编程的重要增强。
以上就是c++++20中的std::jthread有什么用_c++20中std::jthread线程使用方法与示例的详细内容,更多请关注其它相关文章!
# 解决问题
# 唯一图库seo
# 安达实体店的推广营销
# 找家具的关键词排名
# 滑县郑州网站建设
# 网站推广优化外包效果好
# 雨湖区营销网站建设
# 松原seo排名加盟电话
# 固原智能网站优化设计
# 宁波企业seo电话
# 烧烤店营销推广语句文案
# 能为
# 它在
# ai
# 中文网
# 相关文章
# 第一个
# 边缘
# 什么用
# 游戏开发
# 多线程
# 并发编程
# stream
# ios
# c++
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
在Blazor WebAssembly应用中动态注入客户端特定指标代码的策略
FullCalendar 自定义按钮样式定制指南
Python:递归比较文件夹内容并找出特定类型文件的差异
使用CSS更改登录屏幕输入框中PNG图标颜色的策略与局限性
字由网在线版登录地址 字由网网页版安全入口
Odoo 16:在表单视图中基于当前记录动态修改Tree视图属性
最新韩小圈网页版登录入口_官网在线观看官方链接
CSS Flexbox与媒体查询:实现响应式布局中元素的并排与堆叠
多闪网页版在线观看免费入口_多闪官网访问入口
如何在J*a中实现统一对象行为接口_项目大型化时的接口规范化
win11如何加载ICC颜色配置文件 Win11校色文件安装与显示器色彩管理【指南】
excel如何生成目录 excel一键生成工作表目录超链接
c++ 获取系统当前时间 c++时间戳获取方法
cad如何更改注释性对象的比例_cad注释性比例调整方法
12306选座如何查看座位示意图_12306座位示意图解读与使用
Golang如何安装Swagger工具_GoSwagger文档生成环境
痛风发作了怎么办? 快速止痛和后期饮食调理
J*a实现学校排课程序_面向对象结构化项目示例
sublime怎么进行远程开发编辑_配置rsub/rmate实现sublime编辑服务器文件
Fabric Mod开发:在1.19.3+版本中正确添加自定义物品并管理物品组
AngularJS $http POST请求数据传递与Go后端接收实践
想当下一个《2077》?《心之眼》Steam评价升至"多半好评"
sublime如何只显示或隐藏特定类型文件_sublime侧边栏文件过滤
电脑屏幕颜色不舒服怎么办_Windows夜间模式与色彩校准教程【护眼技巧】
快手赚钱渠道_快手收益来源
邮编格式怎么匹配地址_根据邮编格式快速匹配详细地址的技巧
12306选座怎么选到特殊座位_12306特殊座位选择注意事项
抖音商城签到领现金是真的吗_抖音商城签到奖励与提现说明
小米14应用无法联网原因分析_小米14网络权限修复
mcjs网页版流畅运行 mcjs低配电脑畅玩入口
J*aScript中安全有效地处理localStorage字符串数据
天猫2025双十一0点秒杀攻略 天猫爆款抢购时间
J*aScript类型检查_j*ascript代码规范
vivo云服务网页版登录 怎么登录vivo云服务网页版
poki免费入口快捷访问 poki人气小游戏直接玩站点
b站如何看历史记录_b站观看历史找回方法
Log4j Console Appender性能瓶颈与高并发优化策略
在J*a中如何使用Stream.map转换元素_Stream映射操作解析
微信商城在哪里打开【步骤】
解决J*aScript中重复选择项的确认对话框显示问题
age动漫网站入口 age动漫官网直接访问入口
win11怎么查看应用耗电情况 Win11电池设置查看应用能耗排行榜【优化】
sublime侧边栏怎么增强功能_SideBarEnhancements for sublime安装与配置
抓大鹅无需下载版 抓大鹅秒玩版入口
网易大神怎么保存别人动态的图片_网易大神动态图片保存方法
C++如何实现一个智能指针_手动实现C++ shared_ptr的引用计数功能
如何使用spryker/configurable-bundles-products-resource-relationship模块解决复杂产品捆绑关系难题
QQ邮箱官方网页版登录 QQ邮箱个人邮箱快速访问
J*a TimerTask中HashMap意外清空的深层原因与解决方案
Win11怎么查看显卡显存 Win11显示适配器属性及专用视频内存查询


2025-10-30
浏览次数:次
返回列表