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

C++多线程编程:深入剖析std::thread的使用方法

一、线程std::thread简介std::thread是 C11 中引入的一个库用于实现多线程编程。它允许程序创建和管理线程从而实现并发执行。std::thread在#includethread头文件中声明因此使用std::thread时需要包含#includethread头文件。二、语法2.1、构造函数1默认构造函数创建一个空的 thread 执行对象。代码语言C自动换行AI代码解释thread() _NOEXCEPT { // construct with no thread _Thr_set_null(_Thr); }2初始化构造函数创建std::thread执行对象该thread对象可被joinable新产生的线程会调用threadFun函数该函 数的参数由args给出。代码语言C自动换行AI代码解释templateclass Fn,class ... Args explicit thread(Fn fn,Args ... args);表示既可以传入左值也可以传入右值。3拷贝构造函数。代码语言C自动换行AI代码解释// 如果拷贝构造函数被禁用意味着 thread 不可被拷贝构造。 thread(const thread) delete;4move构造函数 。代码语言C自动换行AI代码解释thread(thread x)noexceptmove构造函数调用成功之后x不代表任何thread执行对象。注意可被joinable的thread对象必须在他们销毁之前被主线程join或者将其设置为detached。示例展开代码语言C自动换行AI代码解释#include iostream #include thread using namespace std; void thread_func(int a) { cout thread_func: a (a 10) endl; } int main() { int x 10; thread t1(thread_func, ref(x)); thread t2(move(t1)); // t1 线程失去所有权 thread t3; t3 move(t2); // t2 线程失去所有权 // t1.join(); //执行会报错已放弃 (核心已转储) t3.join(); cout main end: x x endl; return 0; }执行结果代码语言Bash自动换行AI代码解释thread_func: a 20 main end: x 202.2、主要成员函数1get_id()获取线程ID返回类型std::thread::id对象。2joinable()判断线程是否可以加入等待。3join()等该线程执行完成后才返回。4detach()detach调用之后目标线程就成为了守护线程驻留后台运行与之关联的std::thread对象失去对目标线程的关联无法再通过std::thread对象取得该线程的控制权。当线程主函数执行完之后线程就结束了运行时库负责清理与该线程相关的资源。调用 detach 函数之后*this不再代表任何的线程执行实例。joinable() falseget_id() std::thread::id()三、简单线程的创建使用std::thread创建线程提供线程函数或者函数对象并可以同时指定线程函数的参数。传入0个值传入2个值传入引用传入类函数detachmove1传入0个值展开代码语言C自动换行AI代码解释#include iostream #include thread using namespace std; void thread_func1() { cout thread_func1() endl; } int main() { thread t1(thread_func1); // 只传递函数 t1.join(); // 阻塞等待线程函数执行结束 return 0; }2传入2个值展开代码语言C自动换行AI代码解释#include iostream #include thread using namespace std; void thread_func2(int a, int b) { cout thread_func2(): a b a b endl; } int main() { int a 10; int b 16; thread t2(thread_func2, a, b); t2.join(); return 0; }3传入引用展开代码语言C自动换行AI代码解释#include iostream #include thread using namespace std; void thread_func3(int c) { cout thread_func3(): c c cout -- c 10 (c 10) endl; } int main() { int c 10; thread t3(thread_func3, ref(c)); t3.join(); cout main -- 3 : c c , c c endl; return 0; }4传入类函数展开代码语言C自动换行AI代码解释#include iostream #include thread using namespace std; class A { public: void func4(int a) { cout thread: name_ , fun4 a a endl; } void setName(string name) { name_ name; } void displayName() { cout this: this , name: name_ endl; } void play() { std::cout play call! std::endl; } private: string name_; }; int main() { cout test-------------------------- endl; A *a_ptr new A(); a_ptr-setName(hello,C11); thread t4(A::func4, a_ptr, 10); t4.join(); delete a_ptr; A *a_ptr2 new A(); a_ptr2-setName(hello,C14); thread t42(A::func4, a_ptr2, 10);// 传入类的函数地址、类地址、参数 t42.join(); delete a_ptr; return 0; }最好使用取地址符的方式传入类函数避免兼容问题。5detach() 将子线程从主线程中分离出来主线程不再具有管理此子线程的能力。展开代码语言C自动换行AI代码解释#include iostream #include thread using namespace std; void thread_func5() { cout func5 into sleep endl; this_thread::sleep_for(chrono::seconds(2)); cout func5 leave endl; } int main() { thread t5(thread_func5); t5.detach(); // t5.join() // 抛出异常 cout t5 id : t5.get_id() endl; // 抛出异常 cout t5 joinable: t5.joinable() endl; return 0; }执行结果代码语言Bash自动换行AI代码解释t5 id : thread::id of a non-executing thread t5 joinable: 06std::move() 线程所有权转移。展开代码语言C自动换行AI代码解释#include iostream #include thread using namespace std; int main() { thread t6(func6); thread t7(move(t6)); //t6.join(); // 抛出异常 cout t6 id : t6.get_id() endl; cout t6 joinable: t6.joinable() endl; cout t7 joinable: t7.joinable() endl; t7.join(); return 0; }执行结果代码语言Bash自动换行AI代码解释t6 id : thread::id of a non-executing thread t6 joinable: 0 t7 joinable: 1 this is func6 !四、线程封装封装线程子类能继承然后子类能实现具体的业务逻辑。创建线程通过new来实现参数列表和使用构造函数创建是一样的。

相关文章:

C++多线程编程:深入剖析std::thread的使用方法

一、线程std::thread简介std::thread 是 C11 中引入的一个库&#xff0c;用于实现多线程编程。它允许程序创建和管理线程&#xff0c;从而实现并发执行。std::thread 在 #include<thread>头文件中声明&#xff0c;因此使用 std::thread 时需要包含 #include<thread>…...

别只会改设置!Chrome/Edge浏览器主页被劫持的三种隐藏原因与根治方法

浏览器主页劫持的深度攻防&#xff1a;从表象到根源的终极解决方案 每次打开浏览器&#xff0c;那个陌生的主页是否让你感到烦躁&#xff1f;大多数人会直奔浏览器设置试图修改&#xff0c;却发现根本无效。这背后隐藏着远比表面设置更复杂的机制——快捷方式参数注入、注册表钩…...

工业控制、通信设备、医疗仪器:MX30LF2G18AC-TI的嵌入式存储应用版图

MX30LF2G18AC-TI&#xff1a;2Gb SLC NAND闪存的工业级存储方案在工业控制、嵌入式系统以及通信设备等领域&#xff0c;非易失性存储器的选择直接影响设备的数据完整性、运行稳定性及长期供货保障。MX30LF2G18AC-TI是旺宏电子推出的一款2Gb SLC NAND闪存芯片&#xff0c;采用成…...

MCP图像生成服务器:在IDE中无缝集成AI绘图,提升开发与设计效率

1. 项目概述&#xff1a;一个能“听懂人话”的智能图像生成服务器 如果你和我一样&#xff0c;经常在 Cursor、Claude Code 这类 AI 编程工具里写代码、做设计&#xff0c;那你肯定遇到过这样的场景&#xff1a;脑子里有个很棒的视觉创意&#xff0c;比如“一个赛博朋克风格的…...

Doccano自动标注实战:我用它3天搞定了一个NER项目的数据标注

Doccano自动标注实战&#xff1a;我用它3天搞定了一个NER项目的数据标注 1. 项目背景与挑战 上个月接到了一个从新闻文本中抽取公司名和职位的NER任务&#xff0c;标注量约5000条。作为独立开发者&#xff0c;既没有专业标注团队&#xff0c;也没有充足预算购买商业标注服务。传…...

MyScaleDB:基于SQL的向量数据库实战,实现混合查询与AI应用开发

1. 项目概述&#xff1a;当向量数据库遇见SQL如果你最近在折腾大模型应用&#xff0c;尤其是想给AI应用加上“长期记忆”或者实现精准的文档问答&#xff0c;那你大概率已经听过“向量数据库”这个词。从早期的Milvus、Pinecone&#xff0c;到后来各大云厂商纷纷入局&#xff0…...

如何用Python 5分钟获取同花顺问财数据?量化分析终极指南

如何用Python 5分钟获取同花顺问财数据&#xff1f;量化分析终极指南 【免费下载链接】pywencai 获取同花顺问财数据 项目地址: https://gitcode.com/gh_mirrors/py/pywencai 还在为获取金融数据而烦恼吗&#xff1f;想快速筛选股票却苦于没有合适工具&#xff1f;今天我…...

WordPress Puock主题深度解析:高颜值集成化设计与实战配置指南

1. 项目概述&#xff1a;为什么选择Puock主题&#xff1f;如果你正在寻找一款功能强大、颜值在线&#xff0c;并且能让你从繁琐的WordPress主题配置中解脱出来的产品&#xff0c;那么Puock主题绝对值得你花时间深入了解。我接触过不少WordPress主题&#xff0c;从付费到开源&am…...

AI工具导航站Awesome-AITools:社区驱动的资源聚合与高效使用指南

1. 项目概述&#xff1a;为什么我们需要一个AI工具导航站&#xff1f;如果你最近也在关注AI领域&#xff0c;大概率会和我有同样的感受&#xff1a;新工具、新模型、新应用的出现速度&#xff0c;已经快到了让人眼花缭乱的地步。今天刚听说一个能自动剪辑视频的AI&#xff0c;明…...

基于MCP协议的GitHub PR代码审查工具:自动化安全与质量分析

1. 项目概述与核心价值 最近在折腾一个挺有意思的东西&#xff0c;一个专门给GitHub Pull Request做代码审查的MCP服务器。简单来说&#xff0c;它能让你的AI助手&#xff08;比如Cursor里的Claude&#xff09;直接读懂GitHub上的代码变更&#xff0c;然后像一位经验丰富的技术…...

CH32F103C8T6 vs STM32F103C8T6:程序下载生态深度对比与国产替代实战

CH32F103C8T6与STM32F103C8T6程序下载生态全维度对比与国产化迁移指南 在嵌入式开发领域&#xff0c;MCU的程序下载方式往往决定了开发效率的上限。当工程师从熟悉的STM32平台转向国产CH32时&#xff0c;最直接的"水土不服"往往就发生在烧录环节——同样的SWD接口为何…...

ARM与中科创达物联网加速器:一站式平台如何重塑产品开发

1. 项目概述&#xff1a;ARM与中科创达的物联网生态加速器2015年&#xff0c;半导体IP巨头ARM与总部位于北京的中科创达&#xff08;Thundersoft&#xff09;联合宣布&#xff0c;将在中国建立“ARM创新生态加速器”。这个消息在当时可能只是科技新闻版块的一则快讯&#xff0c…...

GeoJSON.io:3分钟创建专业地图,地理数据可视化从未如此简单

GeoJSON.io&#xff1a;3分钟创建专业地图&#xff0c;地理数据可视化从未如此简单 【免费下载链接】geojson.io A quick, simple tool for creating, viewing, and sharing spatial data 项目地址: https://gitcode.com/gh_mirrors/ge/geojson.io 你是否曾经需要在地图…...

实测Taotoken多模型聚合服务的响应延迟与稳定性观感

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 实测Taotoken多模型聚合服务的响应延迟与稳定性观感 1. 引言 在将大模型能力集成到实际应用的过程中&#xff0c;开发者除了关注模…...

解决ROS的‘Done checking log file disk usage’卡顿:你的~/.bashrc里ROS_IP设对了吗?

解决ROS日志检查卡顿&#xff1a;环境变量配置的深层解析与实战指南 当你在终端启动roscore时&#xff0c;是否遇到过长时间卡在"Done checking log file disk usage"提示的尴尬&#xff1f;这个问题看似简单&#xff0c;背后却隐藏着ROS环境配置的关键细节。本文将带…...

开发AI应用时借助Taotoken模型广场快速进行模型选型与测试

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 开发AI应用时借助Taotoken模型广场快速进行模型选型与测试 在开发基于大语言模型的应用或功能时&#xff0c;一个常见的挑战是如何…...

保姆级教程:用Python复现红外小目标检测的LCM算法(附完整代码)

从零实现红外小目标检测&#xff1a;LCM算法Python实战指南 在计算机视觉领域&#xff0c;红外小目标检测一直是颇具挑战性的任务。不同于常规物体检测&#xff0c;红外图像中的目标往往只有几个像素大小&#xff0c;缺乏纹理和形状特征。传统基于深度学习的方法在这种场景下常…...

SwiftUI原生集成ChatGPT API:从架构设计到流式响应实战

1. 项目概述&#xff1a;一个原生的Swift版ChatGPT客户端最近在折腾iOS和macOS上的AI应用开发&#xff0c;发现了一个挺有意思的开源项目&#xff1a;alfianlosari/ChatGPTSwift。简单来说&#xff0c;这是一个用纯SwiftUI构建的、直接调用OpenAI官方API的ChatGPT客户端。它不是…...

从专利大国到专利强国:企业全球专利布局策略与实战指南

1. 从“专利大国”到“专利强国”&#xff1a;一场关于价值与布局的深度思考最近翻看一些行业旧闻&#xff0c;2016年EE Times上那篇关于中国专利“不出海”的讨论&#xff0c;现在读来依然很有嚼头。文章核心就一句话&#xff1a;根据世界知识产权组织&#xff08;WIPO&#x…...

深入浅出:用Grad-CAM解锁Swin Transformer的视觉注意力

1. 为什么需要理解Swin Transformer的视觉注意力&#xff1f; 当你第一次看到Swin Transformer在图像分类任务中表现出色时&#xff0c;可能会好奇它到底"看"到了图像的哪些部分。传统的卷积神经网络&#xff08;CNN&#xff09;通过局部感受野逐步提取特征&#xff…...

深入解析Baichuan-7B:从GPT架构到LoRA微调的实践指南

1. 项目概述&#xff1a;从开源大模型到“百川”入海 最近在和朋友聊起国内大模型的开源生态时&#xff0c;总绕不开一个名字——“百川”。我说的不是地理上的河流&#xff0c;而是由百川智能公司开源的Baichuan系列大语言模型。今天想重点聊聊的&#xff0c;是它的起点&#…...

校企合作奖学金与实习计划:破解半导体硬件人才困境的务实路径

1. 行业人才困境的根源与一个被忽视的解法最近和几位在半导体、硬件设计领域摸爬滚打了十几年的老朋友聊天&#xff0c;话题不出意外地又绕回了“招人难”。从深圳的硬件创业公司&#xff0c;到上海的外企研发中心&#xff0c;再到西安的老牌研究所&#xff0c;几乎所有人都在抱…...

降AI率软件9平台覆盖测评:嘎嘎降自研稳定vs套壳工具单平台!

降AI率软件9平台覆盖测评&#xff1a;嘎嘎降自研稳定vs套壳工具单平台&#xff01; 「支持知网维普」实际只能稳定降一个平台&#xff0c;这是怎么回事&#xff1f; 我是双学位本科生&#xff0c;毕业论文 3.5 万字。学校规定送知网做 AIGC 检测&#xff0c;但导师建议我自己…...

嵌入式与硬件设计前沿:IIoT、FIDO、TSN与GaN无线充电实战解析

1. 项目概述&#xff1a;一场面向硬件工程师的在线技术盛宴如果你是一名嵌入式系统开发者、汽车电子工程师&#xff0c;或者正在为你的智能硬件产品寻找无线充电方案&#xff0c;那么最近一段时间密集出现的线上技术研讨会&#xff0c;绝对值得你花时间关注。这不是泛泛而谈的理…...

MAXON 机电高压油安全切断阀 通用型摆动式闸阀 灰铸铁 8790

在工业锅炉、熔炉及加热系统中&#xff0c;燃料管路的安全切断是防控火灾与爆炸风险的核心环节。MAXON&#xff08;麦克森&#xff09;8790 机电高压油安全切断阀&#xff0c;作为霍尼韦尔旗下经典的通用型摆动式闸阀&#xff0c;以灰铸铁阀体、毫秒级切断速度与严苛安全认证&a…...

如何轻松下载B站4K大会员视频?这款开源工具让你三步搞定离线收藏

如何轻松下载B站4K大会员视频&#xff1f;这款开源工具让你三步搞定离线收藏 【免费下载链接】bilibili-downloader B站视频下载&#xff0c;支持下载大会员清晰度4K&#xff0c;持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 想象一下…...

CoPaw个人AI工作站:私有化部署与智能体集成实战指南

1. 项目概述&#xff1a;你的个人AI工作站 如果你正在寻找一个能真正为你所用、在你掌控之下的AI助手&#xff0c;而不是一个用完即走的聊天机器人&#xff0c;那么CoPaw的出现&#xff0c;可能正是你等待已久的答案。简单来说&#xff0c;CoPaw是一个开源的、可私有化部署的“…...

量子支持向量机原理与硬件优化实践

1. 量子支持向量机基础原理与硬件挑战量子支持向量机&#xff08;QSVM&#xff09;是传统支持向量机在量子计算框架下的扩展&#xff0c;其核心创新点在于利用量子态空间的高维特性构建核函数。与传统核方法相比&#xff0c;量子核映射通过量子电路将经典数据编码到希尔伯特空间…...

中国词元与世界AI元语:模力方舟和口袋龙虾的协同进化

在AI产业从技术突破转向生态竞争的今天&#xff0c;一个核心命题日益凸显&#xff1a;如何让顶尖的AI能力跨越技术鸿沟&#xff0c;真正触达每一个开发者与终端用户&#xff1f;开源中国以“模力方舟”与“口袋龙虾”为双核驱动&#xff0c;构建了一条从底层资源聚合到上层应用…...

【独家首发】DeepSeek-V2模型GPU利用率可视化方案:仅需3个自定义Metrics,告别盲调参数

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;DeepSeek Grafana可视化 DeepSeek 是一款高性能、低延迟的开源时序数据引擎&#xff0c;其原生支持 Prometheus 兼容指标暴露。将 DeepSeek 与 Grafana 集成&#xff0c;可实现对模型推理吞吐、GPU 显存…...