并发是操作系统三大主题之一。在多线程应用程序中,每个线程就像一个独立的代理程序,它们共享并访问同一块内存空间。如果不加以协调,这种共享访问会导致程序无法按预期工作。操作系统不仅提供了锁(Lock)和条件变量(Condition Variable)等原语来支持多线程应用,其本身也是最早的并发程序,必须极其小心地管理自己的内存访问。
并发编程不仅难以理解,而且极易出错,即使是专家也常常在并发算法上栽跟头。因此,编写并发代码的核心原则是保持简单:
- 避免复杂的交互:尽量使用已被证实的经典并发范式(如锁、生产者-消费者队列)。
- 非必要不并发:避免过早优化,只有在真正需要时才引入并发。
- 使用更高层的抽象:如果确实需要并行处理,优先考虑如 Map-Reduce 这样无需直接处理锁和条件变量的简单并行模型。
掌握并发不仅需要理解理论,更需要在实践中进行大量的编码练习。
- 第 26 章 并发:介绍 (2026-02-26)
- 第 27 章 插叙:线程 API (2026-03-03)
- 第 28 章 锁 (2026-03-03)
- 第 29 章 基于锁的并发数据结构 (2026-03-13)
- 第 30 章 条件变量 (2026-03-16)
- 第 31 章 信号量 (2026-03-16)
- 第 32 章 常见并发问题 (2026-03-17)
- 第 33 章 基于事件的并发(进阶) (2026-03-18)