10. 并发控制:同步 (2)

背景回顾:我们分析了同步的本质需求:两个并发的线程等待某个 “同步条件” 达成,从一个 “已知的简单状态” 到达另一个 “已知的简单状态”,完成线程的同步。相应地,我们有了条件变量实现同步,并且解决了生产者-消费者问题 (括号打印问题)。

本讲内容:E. W. Dijkstra 发明的另一种共享内存系统中常用的同步方法:信号量。

10.1 信号量

10.2 使用信号量实现同步

10.3 信号量、条件变量与同步

Take-away Messages

信号量可以看做是互斥锁的一个 “推广”,可以理解成游泳馆的手环、袋子里的球,通过计数的方式实现同步——在符合这个抽象时,使用信号量能够带来优雅的代码。但信号量不是万能的——理解线程同步的条件才是真正至关重要的。

课后习题/编程作业

📚阅读材料

教科书 Operating Systems: Three Easy Pieces

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