新闻中心

c++ std::thread怎么创建和使用_c++多线程编程入门指南

2025-10-31
浏览次数:
返回列表
使用std::thread创建线程需包含头文件并传入可调用对象;2. 示例中通过函数say_hello启动线程输出"Hello"。

c++ std::thread怎么创建和使用_c++多线程编程入门指南

在C++中使用多线程,std::thread 是最基础也是最重要的工具之一。它定义在 头文件中,从 C++11 开始支持,让开发者可以轻松创建和管理线程。

如何创建一个线程

使用 std::thread 创建线程非常简单,只需要将一个可调用对象(比如函数、lambda 表达式、函数对象)传递给它的构造函数即可。

示例:启动一个普通函数作为线程

#include <iostream>
#include <thread>

void say_hello() {
    std::cout << "Hello from thread!" << std::endl;
}

int main() {
    std::thread t(say_hello);  // 启动线程执行 say_hello
    t.join();                  // 等待线程结束
    return 0;
}

上面代码中,std::thread t(say_hello) 创建了一个新线程来运行 say_hello 函数。主线程调用 t.join() 会阻塞,直到子线程执行完成。

传递参数给线程函数

你可以向线程函数传递参数,但要注意:默认是按值传递。如果需要传引用,必须使用 std::ref 包装。

示例:传参与引用传递

#include <iostream>
#include <thread>

void print_value(int& x) {
    x = 42;
    std::cout << "Inside thread: x = " << x << std::endl;
}

int main() {
    int value = 10;
    std::thread t(print_value, std::ref(value));  // 使用 std::ref 传引用
    t.join();
    std::cout << "After thread: x = " << value << std::endl;  // 输出 42
    return 0;
}

如果不使用 std::ref,函数会收到参数的副本,修改不会影响原始变量。

Musho Musho

AI网页设计Figma插件

Musho 76 查看详情 Musho

使用 lambda 表达式创建线程

Lambda 让线程创建更灵活,适合写短小逻辑。

#include <iostream>
#include <thread>

int main() {
    std::thread t([](){
        std::cout << "Lambda thread running!" << std::endl;
    });
    t.join();
    return 0;
}

也可以捕获外部变量(注意:值捕获是副本,引用捕获需确保生命周期安全)。

线程的等待与分离

每个 std::thread 对象在销毁前必须被“处理”——要么 join,要么 detach。

  • t.join():主线程等待子线程结束,之后 t 变为不可连接状态。
  • t.detach():子线程脱离主线程独立运行,不能再被 join。

示例:detach 的使用

std::thread t([]{
    for (int i = 0; i < 5; ++i)
        std::cout << "Detached thread: " << i << std::endl;
});
t.detach();  // 分离线程,不再等待
// 主线程可能很快结束,导致 detached 线程未完成

注意:detached 线程必须确保访问的资源在其生命周期内有效,否则容易出错。

常见错误与注意事项

  • 忘记调用 join 或 detach:会导致程序终止(调用 std::terminate)。
  • 访问局部变量的引用或指针时,主线程过早退出。
  • 多个线程同时访问共享数据需加锁(如 std::mutex),否则引发数据竞争。

基本的线程同步将在后续学习 std::mutexstd::lock_guard 时展开。

基本上就这些。std::thread 的使用并不复杂,关键是理解生命周期管理和数据共享的安全问题。多线程编程入门从此开始,逐步深入即可。

以上就是c++++ std::thread怎么创建和使用_c++多线程编程入门指南的详细内容,更多请关注其它相关文章!


# 最重要  # 湘潭网站建设和制作  # seo三大优化  # seo兼职都有哪些seo顾问  # 河南网站建设信息网  # 免费seo 推广  # 为什么需要网络营销推广  # 小米网站seo分析报告  # 营销网站推广如何做的好  # 新郑本地视频推广网站  # 镇江网站建设定制开发  # 只需  # 工具  # 将在  # 多个  # 你可以  # 见性  # 头文件  # 如何用  # 如何使用  # 多线程  # stream  # ios  # c++ 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 夸克AO3官网入口_AO3镜像网站2025推荐  蛙漫限时开放最深处链接_蛙漫全站漫画会员同款秒开地址  Node.js 中使用 node-cron 实现定时 API 数据抓取与处理  Odoo 16:在表单视图中基于当前记录动态修改Tree视图属性  mc.js免安装版 mc.js一键畅玩入口  wps文字怎么插入目录并自动更新_wps文字如何插入目录并自动更新方法  汽水音乐车机版8.9下载 汽水音乐车机版8.9版本安装入口  零跑汽车11月交付量达70327台 实现连续9个月正增长  J*a递归快速排序中静态变量导致数据累积的陷阱与解决方案  Discord Slash 命令响应超时问题的异步解决方案  精准捕获:如何在页面中监听除特定元素外的所有点击事件  移动端XML文件怎么转换成Excel 手机和平板上的解决方案  Win11文件资源管理器卡顿怎么修 Win11重置资源管理器进程优化响应速度【修复方法】  Go语言中Map值调用指针接收器方法的限制与应对  Centos/Linux 系统下安装 composer 的完整步骤  痛风发作了怎么办? 快速止痛和后期饮食调理  HuggingFaceEmbeddings中向量嵌入维度调整的限制与理解  在J*a中如何捕获IndexOutOfBoundsException_索引越界异常防护方法说明  电脑安装程序提示“错误1722”怎么办_Windows Installer服务问题解决【教程】  漫蛙2网页版漫画入口 漫蛙漫画在线官方登录  “音游” × “怪文书” 题材的节奏冒险游戏 《晕晕电波症候群》确定于2026年4月发售!  AngularJS $http POST请求数据传递与Go后端接收实践  在python-socketio事件处理器中安全访问Flask应用上下文  多闪网页版在线观看免费入口_多闪官网访问入口  J*aScript中在Map循环中检测并处理空数组元素  Windows10怎么开启存储感知 Windows10系统设置自动清理临时文件释放C盘空间【教程】  Windows7怎么硬盘安装 Windows7提取ISO镜像到非系统盘并运行setup.exe实现硬盘直装【教程】  Composer的 "licenses" 命令如何帮助你遵守开源协议_检查项目依赖的许可证合规性  EMS快递官网app_中国邮政速递物流手机客户端  字由网在线版登录地址 字由网网页版安全入口  AI抖音网页版免费视频入口 AI抖音网页端最新视频实时观看  Web Components中自定义开关组件状态同步的常见陷阱与解决方案  蛙漫官方正版入口 蛙漫网页在线全集免费观看  VS Code远程开发时如何处理文件权限问题  Golang如何使用new_Go new分配内存机制讲解  php源码怎么在电脑上测试_电脑测试php源码方法步骤【教程】  12306几点到几点不能订票? | 官方最新系统维护时间全解析  印象笔记如何设提醒任务防漏执行_印象笔记设提醒任务防漏执行【任务提醒】  支付宝碰一碰设备是REDMI手机吗 博主拆机辟谣:处理器、内存都不一样  AO3最新入口2025公告_AO3中文官网合集  在J*aScript中复现SciPy的B样条拟合与求值:关键考量  Win10桌面图标出现小盾牌怎么办 Win10去除UAC图标教程【解决】  sublime如何配置Go语言开发环境_sublime搭建Golang编译运行系统  PyTorch模型训练准确率不提升:诊断与修复常见指标计算错误  Python异步编程实践:使用Binance API构建实时交易数据流  汽车之家官方网站官网入口_汽车之家网页版直接进入  如何解决电商平台定制报价请求的“黑洞”问题,SprykerQuoteRequest模块助你提升客户体验与销售效率  CSS响应式网页如何实现主次模块比例自适应_flex-grow与flex-shrink调整  谷歌邮箱网页版官方页面入口 谷歌邮箱网页端快速访问  Golang如何安装Swagger工具_GoSwagger文档生成环境 

搜索