尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

C++ 多线程基础

C++  多线程基础
📅 发布时间:2026/6/17 23:30:09

C++ 多线程基础

概述

线程(Thread)

  • 线程是程序执行中的单一顺序控制流,多个线程可以在同一个进程中独立运行
  • 线程共享进程的地址空间、文件描述符、堆和全局变量等资源,但每个线程有自己的栈、寄存器和程序计数器

并发(Concurrency)与并行(Parallelism)

  • 并发:多个任务在时间片段内交替执行,表现出同时进行的效果。
  • 并行:多个任务在多个处理器或处理器核上同时执行

C++11标准引入了原生的多线程支持,通过头文件提供了跨平台的多线程API。核心组件包括:

  • std::thread:用于创建线程和管理线程
  • std::mutex:用于线程之间的互斥,防止多个线程同时访问共享资源。
  • std::lock_guard和std::unique_lock:用于管理锁的获取和释放。
  • std::future和std::promise:用于实现线程间的值传递和任务同步

创建线程

通过std::thread来创建线程

std::thread thread_obj(callable, args...)
  • callable: 可调用对象,可以是函数指针、函数对象、Lambda表达式等。
  • args...: 传递给callable的参数列表

使用函数指针

通过函数指针创建线程,这是最基本的方式:

#include <iostream>
#include <thread>// 基本线程函数
void thread_func(int id) {std::cout << "线程" << id << " 正在运行" << std::endl;
}int main() {// 创建线程std::thread t1(thread_func, 1);  // 创建线程,传递函数指针和参数std::thread t2(thread_func, 2);t1.join(); // 等待线程完成t2.join(); // 等待线程完成return 0;
}

运行结果:
image

两个现场同时执行 导致控制台打印错乱

使用函数对象

通过类中的operator()方法定义函数对象来创建线程:

#include <iostream>
#include <thread>class PrintTask {
public:void operator()(int count) const {for (int i = 0; i < count; ++i) {std::cout << "Hello from thread (function object)!\n";}}
};int main() {std::thread t2(PrintTask(), 5); // 创建线程,传递函数对象和参数t2.join(); // 等待线程完成return 0;
}

使用Lambda表达式

Lambda表达式可以直接内联定义线程执行的代码:

#include <iostream>
#include <thread>
int main() {// 使用lambda表达式创建线程std::thread t3([](int num) {std::cout << "Lambda线程" << num << " 正在运行" << std::endl;}, 3); // 创建线程,传递 Lambda 表达式和参数t3.join();// 等待线程完成return 0;
}

线程管理

join()

join()用于等待线程完成执行。如果不调用join()或detach()而直接销毁线程对象,会导致程序崩溃。

t.join();

detach()

detach()将线程与主线程分离,线程在后台独立运行,主线程不再等待它。

t.detach();

线程的传参

值传递

参数可以通过值传递给线程:

std::thread t(func, arg1, arg2);

引用传递

如果需要传递引用参数, 需要使用std::ref:

#include <iostream>
#include <thread>void increment(int& x) {++x;
}int main() {int num = 0;std::thread t(increment, std::ref(num)); // 使用 std::ref 传递引用t.join();std::cout << "Value after increment: " << num << std::endl;return 0;
}

相关新闻

  • 从环境搭建到模型调优:Open-AutoGLM本地部署7大核心步骤(附代码)
  • 2025-2026 中国 10 大权威工业类论坛全景盘点:仪器、机械、工控、电子领域全覆盖 - 品牌推荐大师1
  • 终于有人把知识图谱+LLM融合讲明白了!

最新新闻

  • 2026 福州本土设计型装修公司哪家好?高口碑全案设计机构权威排名 - 资讯速览
  • TC652智能温控系统:从PWM风扇驱动到静音散热实战
  • 逆向AES加密接口与动态Token获取:Python爬虫实战解析
  • CoPaw:基于AI的Selenium自动化脚本智能生成实践
  • 在线学习平台架构实战:从微服务选型到高并发优化全解析
  • 嵌入式调试利器dBUG:TRACE单步、UP上传与TRAP #15实战解析

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号