C++ 多线程总览

这篇保留为旧入口兼容页。新的系统入口见:cpp多线程知识地图。如果第一次看完仍然觉得散,先看 cpp多线程入门导读

内容介绍

现代 C++ 多线程应优先学习标准库,而不是从 pthread 开始。

核心头文件:

#include <thread>
#include <mutex>
#include <condition_variable>
#include <future>
#include <atomic>

推荐顺序

  1. cpp多线程入门导读
  2. cpp多线程知识地图

章节导航

  1. cpp多线程入门导读:用任务、线程、数据、同步、退出建立总模型。
  2. cpp并发与多线程:先分清并发、并行、进程、线程,以及什么时候不该开线程。
  3. cpp并发核心思维:建立任务拆分、执行资源、数据所有权、同步通信、退出取消这条主线。
  4. cpp并发性能模型:建立高吞吐并发的工程指标:线程数、任务粒度、背压、锁竞争、批处理。
  5. cpp线程生命周期:掌握 std::threadjoindetachstd::jthread
  6. cpp线程传参与返回值:解决参数复制、引用传递、生命周期、返回值收集。
  7. cpp互斥锁与RAII:用 RAII 管理锁,避免数据竞争和死锁。
  8. cpp条件变量:实现“没数据就睡眠,有数据再唤醒”的阻塞等待。
  9. cpp原子操作:处理计数器、标志位、停止信号等简单共享状态。
  10. cppfuture和promise:获取异步任务结果,理解 asyncfuturepromise
  11. cppChannel模型:用阻塞队列做任务通信和背压,减少共享状态。
  12. cppWaitGroup模型:用完成计数等待一组任务结束。
  13. cpp线程池:控制并发数量,把任务提交给固定数量工作线程。
  14. cpp协作取消:用 std::jthreadstop_token 做可停止任务。
指向原始笔记的链接

最佳代码实践

  • 新代码优先使用 std::threadstd::jthreadstd::mutex 等标准库能力。
  • pthread 是平台 API,适合理解底层或维护老代码,不适合作为现代 C++ 入门主线。
  • 学多线程时,每段代码都要能解释:谁创建线程、谁等待线程、谁拥有数据、谁负责退出。

常见错误用法

// 不建议作为 C++ 多线程学习入口
#include <pthread.h>

问题:pthread 是 C 风格 API,资源管理和类型安全都不如 C++ 标准库。

注意事项

  • 本目录后续内容以标准 C++ 为主。
  • Linux 编译老版本 GCC 时可能需要加 -pthread
  • Windows、Linux、macOS 都支持 C++ 标准线程库。
  • 如果编译器报 std::threadstd::mutex 不存在,通常不是代码少写头文件,而是当前工具链的 C++ 标准库没有启用线程支持。Windows 建议换 MSVC、LLVM/Clang 或 MinGW-w64。

学习路径