- C++11 引入了 Boost 线程库作为标准线程库,作者 Anthony Williams 为介绍其特性,于 2012 年出版了 C++ Concurrency in Action 一书,并顺应 C++17 于 2019 年 2 月出版了第二版。C++ Concurrency in Action 2ed 前五章介绍了线程支持库的基本用法,后六章从实践角度介绍了并发编程的设计思想,相比第一版多介绍了一些 C++17 特性,如 std::scoped_lock、std::shared_mutex,并多出一章(第十章)介绍 C++17 标准库并行算法,此外个人会在相应处补充 C++20 相关特性,如 std::jthread、std::counting_semaphore、std::barrier、std::latch 等。阅读本书前可参考 Andrew S. Tanenbaum 的 Modern Operating Systems,预备操作系统的基础知识(进程与线程、死锁、内存管理、文件系统、I/O 等)。此为个人笔记,仅供参考,更详细内容见原书。
线程支持库
- 线程管理(Managing thread):<thread>
- 线程间共享数据(Sharing data between thread):<mutex>、<shared_mutex>
- 同步并发操作(Synchronizing concurrent operation):<condition_variable>、<semaphore>、<barrier>、<latch>、<future>、<chrono>、<ratio>
- C++ 内存模型和基于原子类型的操作(The C++ memory model and operations on atomic type):<atomic>
并发编程实践
- 基于锁的并发数据结构的设计(Designing lock-based concurrent data structure)
- 无锁并发数据结构的设计(Designing lock-free concurrent data structure)
- 并发代码的设计(Designing concurrent code)
- 高级线程管理(Advanced thread management)
- 并行算法(Parallel algorithm):<execution>
- 多线程应用的测试与调试(Testing and debugging multithreaded application)
标准库相关头文件
头文件 | 说明 |
---|---|
<thread>、<stop_token> | 线程 |
<mutex>、<shared_mutex> | 锁 |
<condition_variable> | 条件变量 |
<semaphore> | 信号量 |
<barrier>、<latch> | 屏障 |
<future> | 异步处理的结果 |
<chrono> | 时钟 |
<ratio> | 编译期有理数算数 |
<atomic> | 原子类型和原子操作 |
<execution> | 标准库算法执行策略 |
并发库对比
C++11 Thread
特性 | API |
---|---|
thread | std::thread |
mutex | std::mutex、std::lock_guard、std::unique_lock |
condition variable | std::condition_variable、std::condition_variable_any |
atomic | std::atomic、std::atomic_thread_fence |
future | std::future、std::shared_future |
interruption | 无 |
Boost Thread
特性 | API |
---|---|
thread | boost::thread |
mutex | boost::mutex、boost::lock_guard、boost::unique_lock |
condition variable | boost::condition_variable、boost::condition_variable_any |
atomic | 无 |
future | boost::future、boost::shared_future |
interruption | thread::interrupt |
POSIX Thread
特性 | API |
---|---|
thread | pthread_create、pthread_detach、pthread_join |
mutex | pthread_mutex_lock、pthread_mutex_unlock |
condition variable | pthread_cond_wait、pthread_cond_signal |
atomic | 无 |
future | 无 |
interruption | pthread_cancel |
Java Thread
特性 | API |
---|---|
thread | java.lang.Thread |
mutex | synchronized blocks |
condition variable | java.lang.Object.wait、java.lang.Object.notify |
atomic | volatile 变量、java.util.concurrent.atomic |
future | java.util.concurrent.Future |
interruption | java.lang.Thread.interrupt |
线程安全的容器 | java.util.concurrent 中的容器 |
线程池 | java.util.concurrent.ThreadPoolExecutor |