二.进程(5)信号量习题

1. 读者与写者(写者优先方式)

2. 黑白棋问题

3. 嗜睡的理发师问题

4. 生产与销售问题


读者与写者问题

(写者优先方式)

读者优先的关键:

若读者先占有互斥信号量,只有最后一个读者离开,计数降为0时才释放信号量,导致写者弱势。

写者优先同上述方法:

写者先占有某信号后,直到最后一个写者走完才释放该信号,读者才能进入。

【】 增加一个互斥信号量S,读者和写者都争抢该信号;

【】 对写者也进行计数,第1个写者申请S,其他写者不需要申请S;最后一个写者离开时才释放信号量S.

【】 一旦写者先申请到了S,则所有的读者只能等待写者都走完才可进入共享读。而多个写者通过S后,仍要争抢wmutex信号以完成互斥的写入。


二.进程(5)信号量习题_第1张图片

用到的变量

读者间起作用:

【】 Readcount变量,rmutex信号量

写者间起作用:

【】 writecount变量,mutex信号量

读者与写者间起作用:

【】 wmutex

【】S

黑白棋子问题

问题描述

两个人下棋,一方执黑棋,一方执白棋。要求双方轮流下子。给出两种情况的解决办法:

1)执黑子一方先下

2)双方都可以先下,谁先抢到棋盘谁先下。然后开始轮流下子。


二.进程(5)信号量习题_第2张图片


2)先抢到棋盘者先下,然后轮流下子

问题分析:

【】无法用单纯的信号量操作完成,因为初始值无法设置固定值。

【】争抢棋盘需要一个互斥信号m;加入if控制与标志判断。利用互斥信号量与特殊标志变量的结合使用实现有序控制。


二.进程(5)信号量习题_第3张图片

嗜睡的理发师问题

问题描述

一个理发店有N个沙发,1个理发椅;

理发师:

持续睡觉,理发,收钱的动作

顾客:

【】若有沙发,进入等待;否则离开。

【】理发椅空,一顾客放弃沙发,去唤醒它理发;

【】理发后付费,付费完毕离开理发椅,离店。


二.进程(5)信号量习题_第4张图片
二.进程(5)信号量习题_第5张图片

生产与销售问题

问题描述

设一无限大仓库。就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间的差值


二.进程(5)信号量习题_第6张图片

2)生产与销售的关系

【】销售要做的:

【】是否有商品?

设置总商品数S,每次wait(S)

【】有商品,是A还是B?

设置A,B商品计数的信号量SA,SB。对某种商品执行取就wait(SA)

【】是否可以取?

p取操作要满足销售产品的关系。所以wait(SA/SB)前面需要判断控制---判断差值difference


二.进程(5)信号量习题_第7张图片
二.进程(5)信号量习题_第8张图片

你可能感兴趣的:(二.进程(5)信号量习题)