背景回顾:我们分析了同步的本质需求:两个并发的线程等待某个 “同步条件” 达成,从一个 “已知的简单状态” 到达另一个 “已知的简单状态”,完成线程的同步。相应地,我们有了条件变量实现同步,并且解决了生产者-消费者问题 (括号打印问题)。
本讲内容:E. W. Dijkstra 发明的另一种共享内存系统中常用的同步方法:信号量。
信号量可以看做是互斥锁的一个 “推广”,可以理解成游泳馆的手环、袋子里的球,通过计数的方式实现同步——在符合这个抽象时,使用信号量能够带来优雅的代码。但信号量不是万能的——理解线程同步的条件才是真正至关重要的。
教科书 Operating Systems: Three Easy Pieces: