例题1(北京大学1999年);有一个仓库,可以存放A和B两种产品,仓库的存储空;(1)一次只能存人一种产品((A或B);;(2)一N<A产品数量一B产品数量<M;其中,N和M是正整数;试用“存放A’和‘存放B’以及P操作和V操作描述;解答:;应先将表达式转换成制约条件,不可在程序中直接使用;将表达式分解为:;B产品数量—A产品数量<N;A产品数量
例题1(北京大学1999年)
有一个仓库,可以存放A和B两种产品,仓库的存储空间足够大,但要求:
(1)一次只能存人一种产品((A或B);
(2)一N< A产品数量一B产品数量<M
其中,N和M是正整数。
试用“存放A’和‘存放B’以及P操作和V操作描述产品A和产品B的人库过程。
解答:
应先将表达式转换成制约条件,不可在程序中直接使用该表达式
将表达式分解为:
B产品数量—A产品数量<N
A产品数量—B产品数量<M
可这样理解:
(1) 若只放人A产品,而不放入B产品,则A产品最多可放M—1次便被阻塞,即A进程每操作一次就应当将计数器减1(计数器初值为M—1),当计数器值为0时,进程程A被阻塞;每当放入一个B产品,则可令A产品的计数器增加1,表明A产品可以多一次放入产品的机会;同理,
(2) 若只放人B产品,而不放入A产品,则B产品最多可;放N一1次便被阻塞,即A进程每操作一次就应当将计数器减1(计数器初值为N—1)。当计数器值为0时,进程B被阻塞;每当放人一个A产品,则可令B产品的计数器增加1,表明B产品可以多一次放入产品的机会。
由此可见,该问题是一个同步控制问题。又因为一次仅允许一种产品人库,设置信号量mutex控制粮进程互斥访问临界资源(仓库)。
过程如下: begin
mutex:=1;
Sa := M-1;
Sb := N-1;
Parbegin
A产品
begin
repeat
P (Sa);
P (mutex);
A人库;
V (mutex);
V (Sb);
Until false;
End;
B产品
begin
repeat
P (Sb);
P (mutex);
B人库;
V (mutex);
V (Sa);
Until false;
End;
rend;
例题2(华中理工大学1999年试题)
设公共汽车上,司机和售票员的活动分别是:
司机: 售票员:
启动车辆 上乘客
正常行车 关车门
到站停车 售票
开车门
下乘客
在汽车不断地到站,停车,行驶过程中,这两个活动有什么同步关系?并用信号灯的P, V操作实现它们的同步。
解答:
该题没有给出具体的控制关系,可根据常识自己定。如(1)售票员关车门后司机才可以启动车辆。(2)司机到站停车后,票员方可开车门。由此可见本题的控制关系较为简单。
过程如
下:
定义信号量run, stop;
Stop := 0 ; run :=0;
Purbegin
司机:begin
L1:P (run);
启动车辆;
正常行车;
到站停车;
V (stop);
Goto Ll;
End;
售票员:begin
L2:上乘客;
关车门;
V (run);
售票;
P (stop);
开车门;
下乘客;
gotoL2 ;
end;
parend.
例题3(南开大学1997年试题)
在南开大学和天津大学之间有一条弯曲的小路,其中从S到T一段路每次只允许一辆自行车通过,但中间有一个小的“安全岛”M(同时允许两辆自行车停留),可供两辆自行车已从两端进人小路情况下错车使用,如图4.3所示。试设
解答:
本题临界资源较多,需仔细考虑。首先中间的安全岛M仅允许两辆自行车通过,应作为临界资源设置信号量。但仔细分析发现,在任何时刻进人小路的自行车最多不会超过两辆(南开和天大方向各一辆),因此不需为安全岛M设置信号量。在路口S处,南开出发的若干辆自行车应进行路口资源的争夺,以决定谁先进人小路SK段,为此设置信号量S,用以控制路口资源的争夺;同理,设置信号量T,控制天大方向自行车对路口T的争夺。又小路SK段仅允许一辆车通过,设置信号量SK初值为1,同理设置小路LT段信号量LT初值为1。
程序如下:
S := l; T:=1; SK :=1; LT:=1;
Parbegin
进程P:(南开方向自行车)
begin
P(S) ; {与其它同方向的自行车争夺路口S}
P(SK); {同对面自行车争夺路段SK}
通过SK;
进人M; **
V (SK);{一旦进人M,便可释放路段SK}
P (LT) ; {同对面的自行车争夺路段LT}
通过LT;
V (LT);{将路段LT释放}
V(S); {将路口S释放给同方向的正在路口S处等待的自行车}
end,
进程Q:(天大方向自行车‘)
begin
P(T);
P(LT);
通过LT;
进人M;
V(LT);
P(SK);
通过SK;
V(SK);
V(T);
End;
Parend。
说明**:
P进程进人安全岛M后,释放了路段SK,但没有释放路口S,原因在于它是向对面的4进程释放路段资源SK,而在P进程离开小路LT后,才会将路口S释放给其他P进程,如不这样,就会死锁。请考虑如下情况:两个方向各有一辆车前进,若在P进程到达安全岛M后,执行V (S)及V (SK)操作,则有可能使得同方向的其它P进程得到路段SK的使用权,而进人小路;同理,Q进程到达安全岛后执行V (LT)及V (T)操作,有可能使得同方向的其它Q进程得到路段LT而进人小路。此时共有四辆车在整个路径中,最终出现死锁状态。
例题4(北京理工大学1996年试题)
进程之间存在哪几种相互制约关系?各是什么原因引起的?下列活动分别属于哪种
制约关系?
(1)若干同学去图书馆借书;
(2)两队举行篮球比赛;
(3)流水线生产的各道工序;
(4)商品生产和社会消费。
解答:
有直接制约关系(即同步问题)和间接制约关系(即互斥问题);同步问题是存在逻辑关系的进程之间相互等待所产生的制约关系,互斥问题是相互无逻辑关系的进程间竞争使用资源所发生的制约关系。
(1) 约属于互斥关系,因为书的个数是有限的,一本书只能借给一个同学;
(2) 属于互斥关系,篮球只有一个,两队都要争夺;
(3) 属于同步关系,各道工序的开始都依赖前道工序的完成;
(4) 属于同步关系,商品没生产出来,消费无法进行,商品未消费完,生
产也无须
进行。
例题5。(北京邮电大学1999年试题)
某招待所有100个床位,住宿者住人要先登记(在登记表上填写姓名及床位号),离去时要撤消登记(在登记表上删去姓名和床位号)。请给出住宿登记及
撤消登记(退宿)过程的算法描述。
解答:
该题同有限缓冲区的生产者/消费者问题一致,缓冲单元为100个,顾客人住时执行生产者操作,登记过程对应于放产品过程,故对登记表的修改须互斥执行,当床位客满时便不可人住(即放产品). 顾客离开时执行消费者操作, 退宿过程对应于取产品过程,包括修改登记表,删去姓名(即取产品),并将床位归还(空出一个单元)。
过程: 略
例题6。(南京大学2000年试题)
桌子上有一只盘子,最多可容纳两个水果,每次只能放人或取出一个水果。爸爸专向盘子中放苹果(apple),妈妈专向盘子中放橘子(orange),两个儿子专等吃盘子中的橘子,两个女儿专等吃盘子中的苹果。请用P, V操作来实现爸爸、妈妈、儿子、女儿之间的同步与互斥关系。
解答:
盘子为互斥资源,因可以放两个水果,empty初值为2; father放苹果前先看看有无空间,若有则抢盘子,放人apple。后向女儿发信号(V (apple)); mother放橘子前先看看有无空间,若有则抢盘子,放人橘子后向儿子发信号(V (orange));女儿先看有无苹果,若有则抢盘子,取走苹果后将盘子置空(V (empty));儿子先看有无橘子,若有则抢盘子,取走橘子后将盘子置空。
该题是生产者/消费者问题的变形,有两对生产者和消费者。生产者需指明是给哪个消费者的产品,但消费者取走产品后无须特别通知某个生产者,因为空出的缓冲区(盘子)可由两个生产者随意争夺。
设信号量mutex初值为1,控制对盘子的互斥访问;apple表示盘中苹果个数,orange表示盘中橘子个数,初值均为0.
parbegin
father:
begin
Ll:P( empty);
P(mmex );
放苹果;。
V (mutex);
V(apple);
Goto Ll ;
End;
mother:
begin
L2: P(empty) ;
P(mutex);
放橘子;
V (murex );
V(orange);
Coto L2;
End;
【个人感觉就是,了解怎么个流程以后,就使劲的pv,别的也没有什么!】