2023-08-22 08:25:41
《C++ Concurrency In Action》阅读笔记可围绕书籍内容框架与实践价值展开,以下为整理后的核心要点:
一、书籍背景与阅读动机
线程管理:包括线程创建、生命周期控制及资源同步策略。
并发模型:介绍C++11起引入的标准库并发工具(如std::thread、std::mutex、std::condition_variable)。
设计模式:如生产者-消费者模型、读写锁优化等经典并发场景解决方案。
性能考量:线程间通信开销、缓存局部性对性能的影响。

同步机制:
互斥锁(Mutex):std::mutex、std::recursive_mutex的使用场景与死锁预防。
条件变量(Condition Variable):std::condition_variable的等待与通知机制。
原子操作(Atomic):std::atomic类型及其内存序(Memory Order)对指令重排的影响。
任务并行:
Future与Promise:std::future和std::promise实现异步结果传递。
异步任务(Async):std::async与std::launch策略的灵活控制。
并行算法:C++17引入的并行STL算法(如std::sort的并行执行)。
线程池设计:通过复用线程减少创建开销,提升资源利用率。
竞态条件(Race Condition):通过互斥锁或原子操作确保数据一致性。
死锁(Deadlock):遵循“按固定顺序获取锁”等原则避免循环等待。
活锁(Livelock)与饥饿(Starvation):通过条件变量与超时机制优化调度策略。
减少锁粒度:使用细粒度锁(如分段锁)降低并发争用。
无锁编程:在低竞争场景下采用原子操作替代锁,提升吞吐量。
任务分解:将大任务拆分为独立子任务,利用多核并行加速。
多线程日志系统:通过生产者-消费者模型实现异步日志写入,避免I/O阻塞主线程。
并行图像处理:将图像分块后分配至不同线程处理,最后合并结果。
小规模实验:先实现简单多线程程序(如计算π的并行近似值),验证基础功能。
复杂系统集成:逐步尝试在真实项目中应用线程池、异步任务等高级特性。