C++ 多线程总览
这篇保留为旧入口兼容页。新的系统入口见:cpp多线程知识地图。如果第一次看完仍然觉得散,先看 cpp多线程入门导读。
内容介绍
现代 C++ 多线程应优先学习标准库,而不是从 pthread 开始。
核心头文件:
#include <thread>
#include <mutex>
#include <condition_variable>
#include <future>
#include <atomic>推荐顺序
章节导航
指向原始笔记的链接
- cpp多线程入门导读:用任务、线程、数据、同步、退出建立总模型。
- cpp并发与多线程:先分清并发、并行、进程、线程,以及什么时候不该开线程。
- cpp并发核心思维:建立任务拆分、执行资源、数据所有权、同步通信、退出取消这条主线。
- cpp并发性能模型:建立高吞吐并发的工程指标:线程数、任务粒度、背压、锁竞争、批处理。
- cpp线程生命周期:掌握
std::thread、join、detach、std::jthread。- cpp线程传参与返回值:解决参数复制、引用传递、生命周期、返回值收集。
- cpp互斥锁与RAII:用 RAII 管理锁,避免数据竞争和死锁。
- cpp条件变量:实现“没数据就睡眠,有数据再唤醒”的阻塞等待。
- cpp原子操作:处理计数器、标志位、停止信号等简单共享状态。
- cppfuture和promise:获取异步任务结果,理解
async、future、promise。- cppChannel模型:用阻塞队列做任务通信和背压,减少共享状态。
- cppWaitGroup模型:用完成计数等待一组任务结束。
- cpp线程池:控制并发数量,把任务提交给固定数量工作线程。
- cpp协作取消:用
std::jthread和stop_token做可停止任务。
最佳代码实践
- 新代码优先使用
std::thread、std::jthread、std::mutex等标准库能力。 - pthread 是平台 API,适合理解底层或维护老代码,不适合作为现代 C++ 入门主线。
- 学多线程时,每段代码都要能解释:谁创建线程、谁等待线程、谁拥有数据、谁负责退出。
常见错误用法
// 不建议作为 C++ 多线程学习入口
#include <pthread.h>问题:pthread 是 C 风格 API,资源管理和类型安全都不如 C++ 标准库。
注意事项
- 本目录后续内容以标准 C++ 为主。
- Linux 编译老版本 GCC 时可能需要加
-pthread。 - Windows、Linux、macOS 都支持 C++ 标准线程库。
- 如果编译器报
std::thread、std::mutex不存在,通常不是代码少写头文件,而是当前工具链的 C++ 标准库没有启用线程支持。Windows 建议换 MSVC、LLVM/Clang 或 MinGW-w64。
学习路径
- 上一节:cpp多线程知识地图
- 当前阶段:cpp多线程
- 下一节:cpp多线程入门导读