C++多线程编程通过std::thread实现,支持函数、Lambda创建线程,可传值或引用参数,需调用join()或detach()管理线程生命周期,并可使用hardware_concurrency()获取硬件并发数。
C++ 实现多线程编程主要通过标准库中的 std::thread 来完成。从 C++11 开始,C++ 标准提供了对多线程的原生支持,使得开发者无需依赖第三方库(如 pthread)也能轻松编写跨平台的多线程程序。
使用 std::thread 可以通过函数、函数对象、Lambda 表达式等方式创建线程。
基本语法:
#include
#include示例2:使用 Lambda 表达式#include void say_hello() { std::cout << "Hello from thread!" << std::endl; } int main() { std::thread t(say_hello); // 启动新线程执行 say_hello t.join(); // 等待线程结束 return 0; }
#include#include int main() { std::thread t([](){ std::cout << "Lambda in thread" << std::endl; }); t.join(); return 0; }
向线程函数传递参数时,需在构造 thread 对象时一并传入。注意:默认是值传递,若要引用传递,必须使用 std::ref。
示例:传参与引用传递#include#include void print_num(int n, std::string& msg) { n += 10; msg += " (modified)"; std::cout << "n = " << n << ", msg = " << msg << std::endl; } int main() { int val = 5; std::string str = "Hello"; std::thread t(print_num, val, std::ref(str)); // 引用传递 str t.join(); std::cout << "After thread: val = " << val << ", str = " << str << std::endl; return 0; }
输出中可以看到,val 的修改在线程内无效(值传递),而 str 被修改了(引用传递)。
每个 thread 对象有两种运行模式:
必须在 thread 对象销毁前调用其中之一,否则程序会终止(调用 std::terminate)。
示例:分离线程#include#include #include void background_task() { std::this_thread::sleep_for(std::chrono::seconds(2)); std::cout << "Background task done." << std::endl; } int main() { std::thread t(background_task); t.detach(); // 分离线程 std::cout << "Main thread continues..." << std::endl; std::this_thread::sleep_for(std::c hrono::seconds(3)); // 确保主线程不立即退出 return 0; }
可以使用 std::thread::hardware_concurrency() 查询系统建议的最大并发线程数。
unsigned int max_threads = std::thread::hardware_concurrency(); std::cout << "Supports " << max_threads << " concurrent threads.\n";
这个值只是一个提示,可能返回 0(表示无法确定)。
基本上就这些。掌握 std::thread 的创建、参数传递、生命周期管理,就能应对大多数基础多线程场景。实际开发中常配合 mutex、条件变量等同步机制使用,避免数据竞争。
# ai
# c++
# ios
# stream
# 同步机制
# 标准库
# include
# Lambda
# 引用参数
# 线程
# 多线程
# 线程生命周期
# 主线程
# Thread
# 值传递
# 引用传递
# 并发
# 对象
# 就能
# 也能
# 可以通过
# 可以看到
# 可以使用
# 并可
# 只是一个
# 有两种
# 第三方
相关文章:
如何快速搭建FTP站点实现文件共享?
微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?
广州美橙建站如何快速搭建多端合一网站?
专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?
Swift中循环语句中的转移语句 break 和 continue
如何在Windows 2008云服务器安全搭建网站?
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
如何通过wdcp面板快速创建网站?
C#如何序列化对象为XML XmlSerializer用法
建站之星后台管理系统如何操作?
教学论文网站制作软件有哪些,写论文用什么软件
?
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
南平网站制作公司,2025年南平市事业单位报名时间?
如何将凡科建站内容保存为本地文件?
如何在阿里云高效完成企业建站全流程?
如何在西部数码注册域名并快速搭建网站?
山东网站制作公司有哪些,山东大源集团官网?
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
陕西网站制作公司有哪些,陕西凌云电器有限公司官网?
MySQL查询结果复制到新表的方法(更新、插入)
如何高效完成独享虚拟主机建站?
制作宣传网站的软件,小红书可以宣传网站吗?
如何在Golang中指定模块版本_使用go.mod控制版本号
寿县云建站:智能SEO优化与多行业模板快速上线指南
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
建站之星各版本价格是多少?
如何使用Golang table-driven基准测试_多组数据测量函数效率
商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?
北京网站制作网页,网站升级改版需要多久?
C#如何使用XPathNavigator高效查询XML
建站之星微信建站一键生成小程序+多端营销系统
如何快速搭建自助建站会员专属系统?
建站主机空间推荐 高性价比配置与快速部署方案解析
深圳 网站制作,深圳招聘网站哪个比较好一点啊?
企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?
如何选择高效可靠的多用户建站源码资源?
Python路径拼接规范_跨平台处理说明【指导】
javascript中对象的定义、使用以及对象和原型链操作小结
公司门户网站制作流程,华为官网怎么做?
制作网站的基本流程,设计网站的软件是什么?
C#怎么使用委托和事件 C# delegate与event编程方法
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
零服务器AI建站解决方案:快速部署与云端平台低成本实践
建站之星北京办公室:智能建站系统与小程序生成方案解析
开封网站制作公司,网络用语开封是什么意思?
表情包在线制作网站免费,表情包怎么弄?
黑客如何通过漏洞一步步攻陷网站服务器?
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
宝塔建站无法访问?如何排查配置与端口问题?
*请认真填写需求信息,我们会在24小时内与您取得联系。