1.生产者-消费者问题
特点:进程与进程之间的关系是生产资源-消耗资源的关系
做题步骤:
注意,对缓冲区的PV操作放在对缓冲区动作的上下相邻两侧,可以有效避免死锁。
对于程序写完要分析一下多个连续的P操作是否可能产生死锁!!!小和尚老和尚打水喝的例子就是可能会出现这样的情况。
2.哲学家进餐问题(模版)
用第三个方法:使用一个互斥变量,同一时刻保证分配需要的所有资源。
无脑套第三个方法模版
例子:
3.理发师问题
用waiting变量完成表示取号叫号的过程
用service变量实现服务的同步关系
人太多就直接离开的补充(这里直接对waiting变量判断了,不需要加一个新的同步变量)
对睡觉情况的补充
4.读写者问题
(1)读进程优先-会造成写进程饥饿
图示:
代码:
(2)读写公平法
每个进程刚开始就要去queue进行排队
在P(lock)以后V(queue)来唤醒队列排队获得锁的进程
(3)写进程优先
读者反锁写者的门
第一个写者直接先把读者门锁上,然后看更衣室是否被占用(也就是看写锁有没有),如果有就在外面排队获取写门锁。
等写者进去以后,写完成时会去检测一下等待获得写者锁的数量有多少,如果有则只打开写门锁,如果没有,则打开读门锁
5.单纯的前驱后继关系
设置信号量(前V后P操作)
也可以用同步互斥的思路去解题
根据动作写是否需要P,有P必有V