

1.生产者-消费者问题
特点:进程与进程之间的关系是生产资源-消耗资源的关系
做题步骤:

注意,对缓冲区的PV操作放在对缓冲区动作的上下相邻两侧,可以有效避免死锁。
对于程序写完要分析一下多个连续的P操作是否可能产生死锁!!!小和尚老和尚打水喝的例子就是可能会出现这样的情况。
2.哲学家进餐问题(模版)

用第三个方法:使用一个互斥变量,同一时刻保证分配需要的所有资源。

无脑套第三个方法模版
例子:




3.理发师问题

用waiting变量完成表示取号叫号的过程

用service变量实现服务的同步关系

人太多就直接离开的补充(这里直接对waiting变量判断了,不需要加一个新的同步变量)

对睡觉情况的补充

4.读写者问题
(1)读进程优先-会造成写进程饥饿
图示:

代码:

(2)读写公平法


每个进程刚开始就要去queue进行排队
在P(lock)以后V(queue)来唤醒队列排队获得锁的进程

(3)写进程优先



读者反锁写者的门

第一个写者直接先把读者门锁上,然后看更衣室是否被占用(也就是看写锁有没有),如果有就在外面排队获取写门锁。

等写者进去以后,写完成时会去检测一下等待获得写者锁的数量有多少,如果有则只打开写门锁,如果没有,则打开读门锁

5.单纯的前驱后继关系
设置信号量(前V后P操作)

也可以用同步互斥的思路去解题
根据动作写是否需要P,有P必有V
551

被折叠的 条评论
为什么被折叠?



