线程并发给了我们利用多处理器的能力,同时也带来了 “难编程” 的挑战——当然,这样的问题我们见得也不少,通常通过引入新的编程语言机制,或者是一个新的 API 就能解决问题。
本讲内容:基础并发控制:互斥 (mutual exclusion)。
Take-away Messages: 并发编程 “很难”,而类应对这种复杂性的方法就是退回到不并发。我们可以在线程中使用 lock/unlock 实现互斥——所有被同一把锁保护的代码,都失去了并发的机会 (虽然先后依然是不受控制的)。当然,互斥的实现是相当有挑战性的,现代系统中的互斥设计线程中的原子操作、内核中的中断管理、原子操作和自旋等机制。值得注意的是,而只要程序中 “能并行” 的部分足够多,串行化一小部分也并不会对性能带来致命的影响。
教科书 Operating Systems: Three Easy Pieces: