15. 并发控制:同步 (1)

借助硬件原子指令和操作系统的帮助,我们实现了高效的互斥锁,能够确保锁保护的代码块按照某个顺序执行。然而,互斥并不总是能满足多个并发线程协作完成任务的需求,我们很多时候还需要控制代码块执行的先后次序。如何能便捷地让共享内存的线程协作以共同完成计算任务?

本讲内容:并发控制:同步。同步问题的定义、生产者-消费者问题、“万能” 的同步方法:条件变量。

15.1 同步和条件变量

15.2 条件变量的正确打开方式

15.3 实现并发计算图

15.4 总结

Take-away messages: 同步的本质是线程需要等待某件它所预期的事件发生,而事件的发生总是可以用条件 (例如 depth 满足某个条件,或是程序处于某个特定的状态) 来表达。因此计算机系统的设计者实现了条件变量,将条件检查和临界区 “放在一起”,以实现线程间的同步。

📚阅读材料

教科书 Operating Systems: Three Easy Pieces

  • 第 29 章 - Locked Data Structures
  • 第 30 章 - Condition Variables