1. 读者与写者(写者优先方式)
2. 黑白棋问题
3. 嗜睡的理发师问题
4. 生产与销售问题
读者与写者问题
(写者优先方式)
读者优先的关键:
若读者先占有互斥信号量,只有最后一个读者离开,计数降为0时才释放信号量,导致写者弱势。
写者优先同上述方法:
写者先占有某信号后,直到最后一个写者走完才释放该信号,读者才能进入。
【】 增加一个互斥信号量S,读者和写者都争抢该信号;
【】 对写者也进行计数,第1个写者申请S,其他写者不需要申请S;最后一个写者离开时才释放信号量S.
【】 一旦写者先申请到了S,则所有的读者只能等待写者都走完才可进入共享读。而多个写者通过S后,仍要争抢wmutex信号以完成互斥的写入。
用到的变量
读者间起作用:
【】 Readcount变量,rmutex信号量
写者间起作用:
【】 writecount变量,mutex信号量
读者与写者间起作用:
【】 wmutex
【】S
黑白棋子问题
问题描述
两个人下棋,一方执黑棋,一方执白棋。要求双方轮流下子。给出两种情况的解决办法:
1)执黑子一方先下
2)双方都可以先下,谁先抢到棋盘谁先下。然后开始轮流下子。
2)先抢到棋盘者先下,然后轮流下子
问题分析:
【】无法用单纯的信号量操作完成,因为初始值无法设置固定值。
【】争抢棋盘需要一个互斥信号m;加入if控制与标志判断。利用互斥信号量与特殊标志变量的结合使用实现有序控制。
嗜睡的理发师问题
问题描述
一个理发店有N个沙发,1个理发椅;
理发师:
持续睡觉,理发,收钱的动作
顾客:
【】若有沙发,进入等待;否则离开。
【】理发椅空,一顾客放弃沙发,去唤醒它理发;
【】理发后付费,付费完毕离开理发椅,离店。
生产与销售问题
问题描述
设一无限大仓库。就1个门,不允许同时入库,也不允许边入库边出库。
1)两个生产者A,B生产各自的产品入库;但要求满足关系Sa-Sb在限定的[-n,m]差值范围内。
2)一个销售者取产品销售,但对两种产品的卖出进度要把握在Ma-Mb也在[-n,m]范围内。
同步关系分析
互斥:三人在对仓库的使用上必须互斥(mutex=1)
顺序关系:
1)生产者AB之间:因为假设仓库无限大,不需考虑空的限制。控制其能否生产的关键是再生产一个能否满足Sa-Sb在限定的[-n,m]范围内。
【】A、B关心的都是各自的生产指标数量,即A关心x=A-B这个变量的值,同样B关心y=B-A。
【】初值:初始若无产品,A最多可生产m个,B最多可生产n个。自己生产一个必然使对方可以多生产一个。
2)生产与消费之间
【】关心卖出的A、B间的差值
2)生产与销售的关系
【】销售要做的:
【】是否有商品?
设置总商品数S,每次wait(S)
【】有商品,是A还是B?
设置A,B商品计数的信号量SA,SB。对某种商品执行取就wait(SA)
【】是否可以取?
p取操作要满足销售产品的关系。所以wait(SA/SB)前面需要判断控制---判断差值difference
网友评论