当前位置: 首页 > article >正文

C++11 Thread 线程库入门教程

C11 标准正式引入了thread线程库为原生 C 提供了跨平台的多线程编程能力。本文将从基础用法入手详细讲解如何利用该库创建、管理线程包括线程的启动、等待、分离等核心操作帮助开发者快速掌握 C 多线程编程的基础要点。线程的创建在 C11 中创建线程的核心是实例化std::thread对象该对象需要绑定一个可调用对象作为线程的执行入口 —— 可调用对象可以是普通函数、函数对象仿函数、Lambda 表达式等。基本语法格式#include thread // 实例化线程对象绑定执行函数和参数 std::thread 线程对象名(可调用对象, 参数列表...);创建线程后必须通过join()等待线程执行完成或通过detach()将线程分离至后台运行否则会触发未定义行为。基础示例创建简单线程输出文本#include iostream #include thread // 线程执行函数 void print_greeting() { std::cout Hello from new thread! std::endl; } int main() { // 创建线程并绑定执行函数 std::thread t(print_greeting); // 等待线程执行完毕 t.join(); return 0; }向线程传递参数线程函数支持接收参数传递方式分为值传递和引用传递两种需注意不同传递方式的语法细节值传递直接将参数传入std::thread构造函数参数会被拷贝到线程栈中引用传递必须使用std::ref()包装引用参数否则编译器会将引用视为值传递导致编译错误。示例代码#include iostream #include thread #include string // 值传递参数 void print_msg(const std::string msg) { std::cout Message: msg std::endl; } // 引用传递参数 void increase_num(int num) { num; } int main() { // 1. 值传递示例 std::string hello Hello Thread!; std::thread t1(print_msg, hello); t1.join(); // 2. 引用传递示例 int count 0; // 必须用std::ref包装引用否则编译失败 std::thread t2(increase_num, std::ref(count)); t2.join(); std::cout Count after increment: count std::endl; return 0; }等待线程执行完成joinjoin()方法会阻塞当前线程通常是主线程直到目标线程执行完毕。当需要确保线程执行结果被正确处理、资源被释放时必须调用该方法。多线程等待示例#include iostream #include thread #include string void print_thread_id(const std::string id) { std::cout Executing id std::endl; } int main() { // 创建两个并行线程 std::thread t1(print_thread_id, Thread 1); std::thread t2(print_thread_id, Thread 2); // 等待t1执行完成 t1.join(); // 等待t2执行完成 t2.join(); // 所有线程执行完毕后才会执行此行 std::cout All threads have finished execution std::endl; return 0; }分离线程detachdetach()方法会将线程与std::thread对象解耦让线程转入后台运行成为 守护线程主线程无需等待其完成。分离后的线程由操作系统接管执行完毕后自动释放资源。注意事项线程分离后无法再调用join()等待其完成需确保主线程不会过早退出否则可能导致分离线程被强制终止引发未定义行为。分离线程示例#include iostream #include thread #include string void background_task(const std::string task_name) { std::cout Background task [ task_name ] running... std::endl; } int main() { std::thread t(background_task, Task 1); // 分离线程使其在后台运行 t.detach(); std::cout Thread detached, main thread continues... std::endl; // 主线程短暂休眠确保分离线程有时间执行仅为演示 std::this_thread::sleep_for(std::chrono::milliseconds(100)); return 0; }joinable () 方法的使用joinable()是std::thread的成员方法返回布尔值true线程未被join()或detach()可执行等待 / 分离操作false线程已完成、已分离或线程对象为空无法执行等待 / 分离操作。若对非 joinable 的线程调用join()或detach()会抛出std::system_error异常因此建议在操作前先通过joinable()判断。示例代码#include iostream #include thread void simple_task() { std::cout Thread task started std::endl; } int main() { std::thread t(simple_task); // 先判断线程是否可操作再执行join if (t.joinable()) { t.join(); std::cout Thread joined successfully std::endl; } return 0; }常见错误与注意事项未处理线程状态创建线程后未调用join()或detach()主线程退出时会触发程序崩溃或未定义行为共享数据未同步多线程访问共享变量时未使用互斥锁std::mutex等同步机制会导致数据竞争、结果错乱异常未捕获线程内抛出的未捕获异常会直接终止程序需在线程函数内通过try-catch捕获并处理分离线程的生命周期主线程退出前需确保分离线程完成核心逻辑避免线程被强制终止。总结C11std::thread通过绑定可调用对象创建线程必须通过join()等待完成或detach()分离否则会引发未定义行为向线程传递引用参数需使用std::ref()包装joinable()可用于判断线程是否可执行等待 / 分离操作多线程编程需注意共享数据同步、异常捕获以及分离线程的生命周期管理避免数据竞争和程序崩溃。

相关文章:

C++11 Thread 线程库入门教程

C11 标准正式引入了<thread>线程库&#xff0c;为原生 C 提供了跨平台的多线程编程能力。本文将从基础用法入手&#xff0c;详细讲解如何利用该库创建、管理线程&#xff0c;包括线程的启动、等待、分离等核心操作&#xff0c;帮助开发者快速掌握 C 多线程编程的基础要点…...

LaTeX Beamer模板:高效制作专业演示文稿的实用指南

LaTeX Beamer模板&#xff1a;高效制作专业演示文稿的实用指南 【免费下载链接】Latex-Beamer-Template 中文学术LaTeX Beamer模板 项目地址: https://gitcode.com/gh_mirrors/la/Latex-Beamer-Template 价值定位&#xff1a;为什么选择LaTeX Beamer模板&#xff1f; 在…...

3个步骤掌握PathOfBuilding:离线Build优化与规划指南

3个步骤掌握PathOfBuilding&#xff1a;离线Build优化与规划指南 【免费下载链接】PathOfBuilding Offline build planner for Path of Exile. 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding 开篇痛点&#xff1a;流放之路Build构建的3大困境 《流…...

用74LS161和与非门搭个数字钟?手把手教你从秒到时的完整电路(附Multisim仿真文件)

从零搭建数字钟&#xff1a;74LS161与与非门的精妙组合 记得大学第一次接触数字电路实验时&#xff0c;看着面包板上密密麻麻的连线&#xff0c;总觉得数字钟是个遥不可及的复杂系统。直到亲手用74LS161芯片和几个与非门搭建出第一个能走时的电路&#xff0c;那种成就感至今难忘…...

别人都在卷视觉,这家具身公司偏要卷“手感”

衡宇 发自 凹非寺量子位 | 公众号 QbitAI“对具身智能来说&#xff0c;力觉比视觉更重要。”听起来&#xff0c;这句话好像有那么点非主流。放眼当下&#xff0c;大多数具身智能的叙事&#xff0c;视觉几乎是机器人认知世界的第一扇窗。但源自斯坦福机器人和人工智能实验室的通…...

Tsukimi开源媒体播放器使用指南:从零开始打造个性化观影体验

Tsukimi开源媒体播放器使用指南&#xff1a;从零开始打造个性化观影体验 【免费下载链接】tsukimi A simple third-party Emby client 项目地址: https://gitcode.com/gh_mirrors/ts/tsukimi Tsukimi是一款专为媒体爱好者设计的开源媒体播放器&#xff0c;作为第三方Emb…...

保姆级教程:Ubuntu下用TFTP+Uboot给OpenBMC刷系统(附常见错误排查)

嵌入式开发者必备&#xff1a;Ubuntu下OpenBMC系统刷新的全流程避坑指南 在嵌入式系统开发中&#xff0c;OpenBMC作为开源基板管理控制器解决方案&#xff0c;其系统刷新是每位硬件工程师必须掌握的核心技能。不同于普通PC的系统安装&#xff0c;OpenBMC刷新过程涉及TFTP服务配…...

Yuzu模拟器性能优化与版本适配完全指南

Yuzu模拟器性能优化与版本适配完全指南 【免费下载链接】yuzu-downloads 项目地址: https://gitcode.com/GitHub_Trending/yu/yuzu-downloads 问题诊断&#xff1a;你的模拟器是否遇到这些问题&#xff1f; 启动游戏时卡在加载界面&#xff1f;运行过程中频繁掉帧&…...

NVIDIA Jetson Orin NX 16G —— 边缘AI的“小钢炮”

在2026年的边缘计算领域&#xff0c;NVIDIA Jetson Orin NX 16GB 依然被视为高性能嵌入式人工智能的标杆之作。它凭借紧凑的体型和服务器级的算力&#xff0c;成为了机器人、自动驾驶小车及智能安防系统的首选核心。然而&#xff0c;许多开发者在拥抱其强大硬件的同时&#xff…...

3步掌握Zwift-Offline数据修复:从崩溃到满血复活

3步掌握Zwift-Offline数据修复&#xff1a;从崩溃到满血复活 【免费下载链接】zwift-offline Use Zwift offline 项目地址: https://gitcode.com/gh_mirrors/zw/zwift-offline Zwift-Offline作为本地化运行Zwift的开源解决方案&#xff0c;让骑行爱好者能够脱离官方服务…...

阿里云OSS和MQTT授权配置

前言&#xff1a; 建议所有的云服务资源访问都使用指定的RAM账户最小权限操作访问&#xff0c;这样比较安全。这也是阿里云推荐的方式。所以你要为每一种阿里云资源创建RAM账户&#xff0c;而且是创建AccessKey ID/AccessKey Secret 访问类型的账户。那配置了账户就肯定要给账户…...

Qwen-Image-Lightning保姆级教程:从零部署到生成首张图的完整步骤

Qwen-Image-Lightning保姆级教程&#xff1a;从零部署到生成首张图的完整步骤 想体验一下只用4步就能生成高清大图的快感吗&#xff1f;今天要介绍的这个工具&#xff0c;能让你的创意在几十秒内变成一张1024x1024的高清图片&#xff0c;而且对电脑配置要求非常友好。 这个工…...

毕设分享 LSTM天气预测算法系统

0 简介 今天学长向大家介绍一个机器视觉的毕设项目 使用LSTM实现天气时间序列预测 项目运行效果&#xff1a; 毕业设计 lstm天气预测&#x1f9ff; 项目分享:见文末! 1. 数据集介绍 数据集包含14个不同的特征&#xff0c;例如气温&#xff0c;大气压力和湿度。从2003年开始…...

ESP32+W5500嵌入式以太网Web服务器开发指南

1. 项目概述WebServer_ESP32_W5500 是一个专为 ESP32 平台设计的、面向工业级以太网应用的轻量级 Web 服务框架。它并非简单地将 WiFi 协议栈移植到有线网络&#xff0c;而是深度集成 LwIP 协议栈与 W5500 硬件 TCP/IP 加速器&#xff0c;构建出一套兼具高可靠性、低资源占用和…...

Rocky9+ Docker + 容器内Linux桌面环境 + Web远程

一、整体架构设计Rocky9&#xff08;宿主机&#xff0c;无GUI&#xff09; │ ├── Docker │ ├── 容器1&#xff1a;Rocky9 XFCE noVNC ToDesk │ ├── 容器2&#xff1a;Rocky9 XFCE noVNC ToDesk │ └── 容器3&#xff1a;Rocky9 XFCE noVNC ToDes…...

天龙八部GM工具:释放单机版游戏无限潜能的终极指南

天龙八部GM工具&#xff1a;释放单机版游戏无限潜能的终极指南 【免费下载链接】TlbbGmTool 某网络游戏的单机版本GM工具 项目地址: https://gitcode.com/gh_mirrors/tl/TlbbGmTool 你是否厌倦了在天龙八部单机版中反复刷怪升级&#xff1f;是否想要体验顶级装备和技能却…...

用tao-8k构建智能搜索:基于Xinference的文本向量化实战教程

用tao-8k构建智能搜索&#xff1a;基于Xinference的文本向量化实战教程 1. 理解tao-8k文本嵌入模型 1.1 什么是文本向量化 文本向量化是将自然语言文本转换为数值向量的过程。想象一下&#xff0c;就像把一本书的内容浓缩成一个独特的数字指纹&#xff0c;这个指纹能够捕捉书…...

情绪支持对话革命:AFlow 让大模型从一轮共情升级为长期治愈!

❝ 一句话概括&#xff0c;这篇论文把情绪支持对话当成一个“情绪动力学控制问题”&#xff0c;用 Affective Flow 约束每轮回复对下一轮情绪的影响&#xff0c;核心诉求是让安慰不是“好听”&#xff0c;而是“长期有效”。 第一阶段&#xff1a;识别核心概念 论文的Motivati…...

lychee-rerank-mm保姆级教程:如何用lychee debug模式调试自定义指令

lychee-rerank-mm保姆级教程&#xff1a;如何用lychee debug模式调试自定义指令 1. 快速了解lychee-rerank-mm lychee-rerank-mm是一个轻量级的多模态重排序工具&#xff0c;它能同时理解文本和图像内容&#xff0c;帮你把最相关的信息排到最前面。 想象一下这样的场景&…...

在线生成工具(画图类)

最近挖到一个超实用的宝藏AI网站&#xff0c;简直是做毕业设计、课程设计的神器&#xff01;它可以免费绘制ER图、用例图、功能结构图、流程图等多种图表&#xff0c;操作简单不用复杂排版&#xff0c;一键就能快速生成。最厉害的是支持图表之间互相转化&#xff0c;还自带智能…...

Win11Debloat:系统深度优化实现Windows性能与隐私双重提升

Win11Debloat&#xff1a;系统深度优化实现Windows性能与隐私双重提升 【免费下载链接】Win11Debloat 一个简单的PowerShell脚本&#xff0c;用于从Windows中移除预装的无用软件&#xff0c;禁用遥测&#xff0c;从Windows搜索中移除Bing&#xff0c;以及执行各种其他更改以简化…...

如何通过Win11Debloat实现Windows系统终极优化:隐私保护与性能提升完整指南

如何通过Win11Debloat实现Windows系统终极优化&#xff1a;隐私保护与性能提升完整指南 【免费下载链接】Win11Debloat 一个简单的PowerShell脚本&#xff0c;用于从Windows中移除预装的无用软件&#xff0c;禁用遥测&#xff0c;从Windows搜索中移除Bing&#xff0c;以及执行各…...

EcomGPT-中英文-7B电商模型与YOLOv8联动:视频带货中的实时商品检测与描述生成

EcomGPT-中英文-7B电商模型与YOLOv8联动&#xff1a;视频带货中的实时商品检测与描述生成 最近在琢磨一个挺有意思的事儿&#xff1a;怎么让AI在直播或者短视频里&#xff0c;自己“看见”商品&#xff0c;然后“张嘴”就把卖点给讲出来。听起来有点像科幻片里的场景&#xff…...

高清高透窗纱网厂家推荐与高透窗纱网产品特点分析

高清高透窗纱网的市场前景与应用分析随着生活质量不断提高&#xff0c;消费者对家居环境的要求也逐步上升。高清高透窗纱网以其优异的透气性和防蚊虫性能&#xff0c;正日益受到欢迎。我们的市场研究表明&#xff0c;该产品不仅适合家庭使用&#xff0c;还是办公室及农业领域中…...

Realistic Vision V5.1虚拟摄影棚实操:多轮迭代生成——从草图到精修人像

Realistic Vision V5.1虚拟摄影棚实操&#xff1a;多轮迭代生成——从草图到精修人像 1. 项目概述 Realistic Vision V5.1虚拟摄影棚是一款基于Stable Diffusion 1.5生态顶级写实模型开发的本地化工具&#xff0c;专为摄影级人像生成而设计。这个工具解决了普通用户在尝试使用…...

做企业级数据库权限管理,工具应该怎么选?为什么 NineData 值得作为核心选型参考

一旦团队开始认真治理数据库权限&#xff0c;市面上的可选方案会一下子变多&#xff1a;数据管理平台、数据库 DevOps 平台、堡垒机、工单系统、甚至自建审批表单都可能被拿来比。但“谁都能做一点权限管理”和“谁更适配企业级数据库权限治理”不是一回事。如果你的目标是把申…...

AIGlasses OS Pro Java面试题解析:视觉相关算法实现

AIGlasses OS Pro Java面试题解析&#xff1a;视觉相关算法实现 最近有不少朋友在准备技术面试&#xff0c;特别是那些涉及智能硬件和视觉算法的岗位。我发现很多面试官喜欢问一些结合了实际产品场景的算法题&#xff0c;比如“如果让你为AIGlasses OS Pro这样的智能眼镜实现一…...

如何通过TMSpeech实现本地化语音交互:突破实时性与隐私性的技术方案

如何通过TMSpeech实现本地化语音交互&#xff1a;突破实时性与隐私性的技术方案 【免费下载链接】TMSpeech 腾讯会议摸鱼工具 项目地址: https://gitcode.com/gh_mirrors/tm/TMSpeech 引言&#xff1a;重新定义本地化语音处理的价值边界 在数字化浪潮席卷各行各业的今天…...

收藏!AI抢人大战杀疯了:应届博士年薪500万,程序员/小白必看上车指南

2026年的AI行业&#xff0c;最炸裂的新闻从来不是某款新模型发布&#xff0c;也不是某项技术突破&#xff0c;而是一句足以让所有从业者震惊的消息&#xff1a;应届博士生年薪500万 &#x1f4b0; 没错&#xff0c;就是500万&#xff01;而且这绝非个例&#xff0c;已经成为AI…...

Step3-VL-10B效果展示:同一张图不同温度参数下——确定性OCR vs 创意描述对比

Step3-VL-10B效果展示&#xff1a;同一张图不同温度参数下——确定性OCR vs 创意描述对比 1. 引言&#xff1a;温度参数如何影响你的视觉模型体验 如果你用过Step3-VL-10B这个视觉语言模型&#xff0c;可能会注意到一个叫“温度”的参数。这个参数看起来有点神秘&#xff0c;…...