Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
c++20中的std::jthread有什么用_c++20中std::jthread线程使用方法与示例_创想鸟

c++20中的std::jthread有什么用_c++20中std::jthread线程使用方法与示例

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

c++20中的std::jthread有什么用_c++20中std::jthread线程使用方法与示例

在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 #include #include 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;}

输出:

立即学习“C++免费学习笔记(深入)”;

Working… 0
Working… 1
Working… 2

支持线程中断的示例

std::jthread 最大的亮点是支持协作式中断。线程函数可以接收一个 std::stop_token,用于检测是否收到停止请求。

#include #include #include 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 0
Step 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线程使用方法与示例的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1481700.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
c++怎么遍历set_c++ set遍历方法解析
上一篇 2025年12月19日 05:43:34
c++怎么使用shared_ptr_c++ shared_ptr智能指针详解
下一篇 2025年12月19日 05:43:48

相关推荐

  • Java中指定范围内素数查找与数组返回的实现教程

    Java中指定范围内素数查找与数组返回的实现教程Java中指定范围内素数查找与数组返回的实现教程Java中指定范围内素数查找与数组返回的实现教程Java中指定范围内素数查找与数组返回的实现教程

    本教程将详细介绍如何在Java中高效地查找指定范围内的所有素数,并将这些素数收集到一个整型数组中返回。我们将探讨素数判断方法的优化,动态数据收集(使用ArrayList)的策略,以及如何利用Java 8 Stream API将列表转换为数组,并提供完整的代码示例和使用注意事项。 1. 素数判断方法 …

    2026年9月30日 • 用户投稿
    100
  • ​Windows 11 任务栏新添 AI 助手 “Taskbar Companion”

    ​Windows 11 任务栏新添 AI 助手 “Taskbar Companion”​Windows 11 任务栏新添 AI 助手 “Taskbar Companion”​Windows 11 任务栏新添 AI 助手 “Taskbar Companion”​Windows 11 任务栏新添 AI 助手 “Taskbar Companion”

    微软公司正深入测试 Windows 11 任务栏的一项全新功能,代号为“Taskbar Companion”(任务栏伴侣)的 AI 助手逐渐进入公众视野,引发广泛关注。该功能的目标是提升用户与智能助手及各类智能体之间的交互效率。数周以来,关于这一实验性模块的消息陆续曝光,最近又出现了新的技术线索,进…

    2026年9月30日 • 用户投稿
    000
  • 托方大同的“符”,在视频号与75万网友达成共鸣

    托方大同的“符”,在视频号与75万网友达成共鸣托方大同的“符”,在视频号与75万网友达成共鸣托方大同的“符”,在视频号与75万网友达成共鸣托方大同的“符”,在视频号与75万网友达成共鸣

    作者 | 金鑫yoyo ​缘 起 3月1日,方大同因病去世的信息正式公布。 当时,内心“咯噔”一下,突然感觉我们这代人也开始进入“离开倒计时”了。 耳边除了响起林夕写的那首《开到荼蘼》,还涌现了罗永浩在直播间里讲过的话: “我今年50岁了,我的朋友圈里已经偶尔就有一个人去世了。20-30岁时你肯定没…

    2026年9月30日 • 用户投稿
    000
  • 生存掠夺射击游戏《无尽猎杀》Steam试玩现已开启!

    发行商Assemble Entertainment发布了最新一款令人肾上腺素飙升的独立游戏——《无尽猎杀》,这是一款由乌克兰开发商Pushka Studios打造的高燃动作肉鸽游戏。该游戏在科隆游戏展精彩独立游戏环节现场公布,将经典的生存者玩法与深度的掠夺射击游戏成长系统相结合,背景设定在一个被恶魔…

    2026年9月30日
    100
  • Sublime写模型训练日志监控脚本_适用于机器学习任务过程追踪

    Sublime写模型训练日志监控脚本_适用于机器学习任务过程追踪Sublime写模型训练日志监控脚本_适用于机器学习任务过程追踪Sublime写模型训练日志监控脚本_适用于机器学习任务过程追踪Sublime写模型训练日志监控脚本_适用于机器学习任务过程追踪

    %ignore_a_1% text 通过构建系统与 python 脚本协同工作,可实现日志监控。1. 创建 monitor.py 脚本,记录读取位置并持续输出新增内容;2. 配置 sublime text 构建系统 monitorlog.sublime-build,指定 python 运行脚本及日志…

    2026年9月30日 • 用户投稿
    000
  • 从太空看NVIDIA的 “奋进号” 总部:无处不在的三角形

    从太空看NVIDIA的 “奋进号” 总部:无处不在的三角形从太空看NVIDIA的 “奋进号” 总部:无处不在的三角形从太空看NVIDIA的 “奋进号” 总部:无处不在的三角形从太空看NVIDIA的 “奋进号” 总部:无处不在的三角形

    9月23日消息,在硅谷这片科技热地之中,每当一家科技公司脱颖而出,其总部大楼往往成业界关注的焦点。 NVIDIA,AI行业最为炙手可热的明星企业,市值已经高达4.3万亿美元,它的新总部大楼,一个为协作创新设计的未来办公场所,也承载了NVIDIA 的品牌理念。 NVIDIA总部大楼名为“Endeavo…

    2026年9月30日 • 用户投稿
    000
  • 将 XML Bean 定义迁移到 @Configuration 注解类

    将 XML Bean 定义迁移到 @Configuration 注解类 本文将指导您如何将 Spring 应用中基于 XML 的 JMS Bean 定义迁移到使用 @Configuration 注解的 Java 类中。通过示例,我们将展示如何使用 @Bean 注解创建 JmsTemplate 和 J…

    2026年9月30日
    000
  • windows资源监视器怎么用_资源监视器性能分析与使用指南

    资源监视器可精确定位电脑卡顿根源。通过Win+R输入resmon或任务管理器打开,利用CPU、内存、磁盘、网络标签页分别查看高占用进程、内存泄漏、I/O瓶颈及异常网络连接,结合排序与勾选功能深度分析系统性能问题。 如果您发现电脑运行缓慢、程序无响应或网络卡顿,可能是因为某些后台进程过度占用系统资源。…

    2026年9月30日
    000
  • Java中利用正则表达式实现字符串特定单词的忽略大小写替换

    本教程旨在解决如何在字符串中高效地将特定单词的所有大小写变体统一转换为指定大小写形式的问题。通过引入正则表达式的“大小写不敏感”匹配模式,我们能够避免为每种变体编写单独的替换规则,从而实现简洁、灵活且强大的字符串处理,显著提升代码效率和可维护性。 传统替换方法的局限性 在字符串处理中,我们经常会遇到…

    2026年9月30日
    000
  • 豆包AI安装后权限被系统阻止 豆包AI系统权限配置与安全例外设置

    豆包AI安装后权限被系统阻止 豆包AI系统权限配置与安全例外设置豆包AI安装后权限被系统阻止 豆包AI系统权限配置与安全例外设置豆包AI安装后权限被系统阻止 豆包AI系统权限配置与安全例外设置豆包AI安装后权限被系统阻止 豆包AI系统权限配置与安全例外设置

    本文将围绕豆包AI在安装后可能遇到的系统权限阻止问题进行详细说明。通过对系统安全设置的调整以及添加应用程序为例外项的操作,可以有效解决此问题。接下来的内容将分步骤引导您完成整个配置过程,旨在帮助您理解并顺利完成操作,确保豆包AI的正常运行。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费…

    2026年9月30日 • 用户投稿
    000
  • 提升代码质量之Java枚举的正确用法_Java枚举类型的实战技巧

    提升代码质量之Java枚举的正确用法_Java枚举类型的实战技巧提升代码质量之Java枚举的正确用法_Java枚举类型的实战技巧提升代码质量之Java枚举的正确用法_Java枚举类型的实战技巧提升代码质量之Java枚举的正确用法_Java枚举类型的实战技巧

    Java枚举通过封装数据和行为,提供类型安全、避免魔法值,提升代码可读性与可维护性,如订单状态枚举可携带状态码、描述及处理逻辑,并支持策略模式,取代冗长if-else,实现清晰多态。 Java枚举,远不止是简单的常量集合,它是提升代码健壮性、可读性和可维护性的利器。通过它,我们能将一组固定的、有限的…

    2026年9月30日 • 用户投稿
    100
  • sublime如何优化Ruby开发体验 sublime高效编写Ruby代码的技巧

    sublime如何优化Ruby开发体验 sublime高效编写Ruby代码的技巧sublime如何优化Ruby开发体验 sublime高效编写Ruby代码的技巧sublime如何优化Ruby开发体验 sublime高效编写Ruby代码的技巧sublime如何优化Ruby开发体验 sublime高效编写Ruby代码的技巧

    选择插件时应优先考虑代码提示、语法高亮、错误检查、代码片段、格式化和测试支持;2. 安装sublimerspec和testunit以便捷运行测试;3. 使用ruby bundle或自定义snippets提升编码速度;4. 配置sublimelinter与rubocop实现语法检查和代码格式化;5. …

    2026年9月30日 • 用户投稿
    300
  • 多模态AI模型部署硬件选型 多模态AI服务器配置推荐清单

    多模态AI模型部署硬件选型 多模态AI服务器配置推荐清单多模态AI模型部署硬件选型 多模态AI服务器配置推荐清单多模态AI模型部署硬件选型 多模态AI服务器配置推荐清单多模态AI模型部署硬件选型 多模态AI服务器配置推荐清单

    本文将围绕多模态AI模型部署的硬件选型问题展开叙述。首先,我们会深入分析多模态模型对硬件的核心需求,接着,将提供一个清晰的分步指南,讲解如何根据具体应用场景进行硬件的合理选配。最后,会给出一份具体的服务器配置推荐清单,帮助您直观地理解各组件的搭配方案,从而为您的AI项目构建一个高效、稳定的硬件基础。…

    2026年9月30日 • 用户投稿
    000
  • 华为Mate 80系列“十大黑科技”曝光 含新一代红枫镜头

    华为Mate 80系列“十大黑科技”曝光 含新一代红枫镜头华为Mate 80系列“十大黑科技”曝光 含新一代红枫镜头华为Mate 80系列“十大黑科技”曝光 含新一代红枫镜头华为Mate 80系列“十大黑科技”曝光 含新一代红枫镜头

    近日,数码博主曝光了华为mate 80系列旗舰手机的“十大黑科技”配置细节。作为华为2025年的重磅新品,该系列预计将于11月正式发布,涵盖四款机型:mate 80、mate 80 pro、mate 80 pro+以及mate 80 rs非凡大师版。 华为Mate 70系列 双层OLED屏幕技术突破…

    2026年9月30日 • 用户投稿
    100
  • Java中Try-Catch块与循环的正确使用方法

    Java中Try-Catch块与循环的正确使用方法Java中Try-Catch块与循环的正确使用方法Java中Try-Catch块与循环的正确使用方法Java中Try-Catch块与循环的正确使用方法

    本文旨在阐明在Java编程中,当try-catch块与for循环结合使用时,异常处理如何影响循环的执行流程。通过分析一个汽车租赁服务的示例,详细解释了将try-catch块放置在循环外部和内部的区别,并提供了正确的代码结构以确保程序在遇到异常时能够继续执行。 在Java编程中,合理地使用try-ca…

    2026年9月30日 • 用户投稿
    000
  • sublime如何实现AI代码补全 sublime集成Copilot的替代方案

    sublime如何实现AI代码补全 sublime集成Copilot的替代方案sublime如何实现AI代码补全 sublime集成Copilot的替代方案sublime如何实现AI代码补全 sublime集成Copilot的替代方案sublime如何实现AI代码补全 sublime集成Copilot的替代方案

    sublime text需通过插件实现ai代码补全,因其本身不集成ai功能,但可通过package control安装如tabnine等插件来实现;2. tabnine支持多语言和本地补全,保护隐私且无需订阅,但智能性略逊于copilot;3. 可通过编写自定义插件调用openai api实现补全,…

    2026年9月29日 • 用户投稿
    200
  • Try-Catch 块与 For 循环的协同工作:异常处理与循环控制

    Try-Catch 块与 For 循环的协同工作:异常处理与循环控制Try-Catch 块与 For 循环的协同工作:异常处理与循环控制Try-Catch 块与 For 循环的协同工作:异常处理与循环控制Try-Catch 块与 For 循环的协同工作:异常处理与循环控制

    在软件开发中,异常处理是确保程序稳定性的关键环节。当 try-catch 块与 for 循环结合使用时,异常的处理方式会直接影响循环的执行流程。理解这种交互对于编写健壮且能有效处理错误的程序至关重要。 Try-Catch 块与 For 循环的交互 正如文章摘要所说,本文深入探讨了在 try-catc…

    2026年9月29日 • 用户投稿
    100
  • 计算Java中两个日期时间之间的天、时、分、秒差

    计算Java中两个日期时间之间的天、时、分、秒差计算Java中两个日期时间之间的天、时、分、秒差计算Java中两个日期时间之间的天、时、分、秒差计算Java中两个日期时间之间的天、时、分、秒差

    本文旨在指导Java开发者如何计算给定日期时间(例如:”Wednesday 02-October-2022 11:51:1 PM”)与当前时间之间的天数、小时数、分钟数和秒数差。文章将详细介绍如何使用DateTimeFormatter解析日期和时间字符串,如何处理时区信息,以…

    2026年9月29日 • 用户投稿
    100
  • 豆包AI安装包哈希值验证 豆包AI文件完整性校验步骤

    豆包AI安装包哈希值验证 豆包AI文件完整性校验步骤豆包AI安装包哈希值验证 豆包AI文件完整性校验步骤豆包AI安装包哈希值验证 豆包AI文件完整性校验步骤豆包AI安装包哈希值验证 豆包AI文件完整性校验步骤

    本文将围绕豆包AI安装包的哈希值验证问题进行说明。哈希值,可以理解为文件的数字指纹,每个文件都有一个独特的、固定长度的哈希值。通过验证下载的安装包哈希值与官方提供的是否一致,可以有效判断文件在传输过程中是否被篡改或损坏,从而保障其完整性和安全性。接下来的内容将通过详细的步骤讲解,指导您如何获取官方哈…

    2026年9月29日 • 用户投稿
    100
  • 生成准确表达文章主题的标题在循环中使用 Try-Catch 块:确保程序持续运行

    生成准确表达文章主题的标题在循环中使用 Try-Catch 块:确保程序持续运行生成准确表达文章主题的标题在循环中使用 Try-Catch 块:确保程序持续运行生成准确表达文章主题的标题在循环中使用 Try-Catch 块:确保程序持续运行生成准确表达文章主题的标题在循环中使用 Try-Catch 块:确保程序持续运行

    本文探讨了在循环结构(特别是 for 循环)中使用 try-catch 块的正确方法。通过将 try-catch 块放置在循环内部,即使在某次迭代中发生异常,程序也能捕获并处理该异常,从而保证循环的其余部分继续执行,避免程序因异常而中断。本文将通过示例代码详细解释这种方法,并提供实际应用中的注意事项…

    2026年9月29日 • 用户投稿
    100

发表回复

登录后才能评论
关注微信