P、V操作习题答案Word格式.doc
《P、V操作习题答案Word格式.doc》由会员分享,可在线阅读,更多相关《P、V操作习题答案Word格式.doc(9页珍藏版)》请在冰豆网上搜索。
End;
P3:
P(s1)
…
V(s3)
End;
P4:
P(s2);
…
V(s4);
P5:
begin
P(s2);
..;
End;
P6:
P(s3)
..
V(s4)
End;
P7:
begin
P(s4);
…
Parend
end
2.请用信号量实现4×
100(4人,每人100米)接力赛的同步过程。
提示:
前趋图同步问题,可设4个进程,三个信号量,进程1只设V操作,进程4只设P操作,其余进程先做P操作再做V操作。
Vars1,s2,s3:
=0,0,0;
Parbegin
Athlete1:
Run100m;
V(s1);
End;
Athlete2:
P(s1)
V(s2);
Athlete3:
P(s2);
Run100m;
V(s3);
Athlete4:
P(s3);
Parend
end
3.设公共汽车上,司机和售票员的活动分别是:
司机:
售票员:
启动车辆
上乘客
正常行车
关车门
到站停车
售票
开车门
下乘客
在汽车不断地到站、停车、行驶过程中,这两个活动有什么同步关系?
请用信号量机制实现他们的同步。
/-假定初始状态为停车状态,引入信号量Stop和Run:
BEGIN
semaphoreStop,Run;
Stop:
=Run:
=0;
CoBegin
Driver:
Repeat
Wait(Run);
启动车辆;
正常行驶;
到站停车;
Signal(Stop);
UntilFalse;
END;
Conductor:
BEGIN
上乘客;
关车门;
Signal(Run);
售票;
Wait(Stop);
开车门;
下乘客;
CoEnd;
生产者消费者问题:
1.桌上有一个可以容纳两个水果的盘子,每次只能放或取一个水果。
爸爸放苹果妈妈放橘子,两个儿子吃苹果,两个女儿吃橘子。
试用信号量和P、V操作,编写实现爸爸、妈妈、儿子和女儿的并发工作程序。
Mutex实现互斥放或取水果。
empty盘子可放水果数
Apple盘子中放的苹果数
Orange盘子中放的橘子数
Semaphoremutex=1;
Semaphoreempty=2;
Semahporeapple=0;
Semahporeorange=0;
Main()
{
Cobegin
Father();
Mother();
Son();
Daughter();
;
Coend)
}
Father()
While(true)
{p(empty)
P(mutex)
放苹果
V(mutex)
V(apple)}
Mother()
放橘子
V(mutex)
V(orange)}
Son()
{p(apple)
取苹果
V(empty)}
Daughter()
{p(orange)
P(mutex)
取橘子
V(mutex)
V(empty)}
2、有一个仓库存放两种零件A和B,最大库容量各为m个。
有一车间不断地取A和B进行装配,每次各取一个。
为了避免零件锈蚀,遵循线入库者先出库的原则。
有两组供应商分别不断地供应A和B(每次一个),为保证齐套和合理库存,当某种零件的数量比另一种数量超过n(n<
m)个时,暂停对数量大的零件的进货,集中补充数量少的零件。
试用P、V操作正确实现之。
semaphoremutex=1,emptya=emptyb=m,fulla=fullb=0,sa=sb=n;
main()
{CoBegin
Provider_A();
//零件A供应商
Provider_B();
//零件B供应商
Assembling_Shop();
//装配车间
CoEnd
}
Provider_A()
{while(true)
{p(emptya);
p(sa);
p(mutex);
将零件A放入仓库;
v(mutex);
v(fulla);
v(sb);
Provider_B()
{p(emptyb);
p(sb);
将零件B放入仓库;
v(fullb);
v(sa);
Assembling_Shop()
{p(fulla);
p(fullb);
装配零件;
v(emptya);
v(emptyb);
3、有一个仓库,可以存放A和B两种产品,仓库的存储空间足够大,但要求:
每次只能存入一种产品(X或Y);
-N<
A产品数量-B产品数量<
M。
其中,N和M时正整数。
试用“存放A”、“存放B”和P、V操作描述产品A与产品B的入库过程。
A-B<
M说明:
如果只放A不放B,则A最多可放M-1个,如果多放一个B,则可以多放一个A。
B-A<
N说明:
如果只放B不放A,则B最多可放N-1个,如果多放一个A,则可以多放一个B。
/2-BEGIN
Mutex,SA,SB:
semaphore;
Mutex:
=1;
SA:
=M-1;
SB:
=N-1;
parBegin
processPA
Begin
loop:
P(SA);
P(Mutex);
存放A;
V(Mutex);
V(SB);
Gotoloop;
End;
processPB
Begin
loop:
P(SB);
存放B;
V(SA);
parEnd;
/北大91
读者写者问题:
1、多个进程共享一个文件,其中只读文件的程值为读者,其余只写文件的称为写者。
读者可以同时读,但写者只能独立地写。
说明进程间的相互制约关系,应设置哪些信号量?
用P、V操作写出其同步算法;
修改上述算法,使得它对写者优先,即一旦有写者到达,后续的读者都必须等待,而无论是否有读者在读文件。
(该问题的又一提法:
在一个飞机订票系统中,多个用户共享一个数据库。
多用户同时查询是可以接受的,但若一个用户要订票需更新数据库时,其余所有用户都不可以访问数据库。
请画出用户查询与订票的逻辑框图(等价于同步进程的描述的图式表示)。
为了提高写者的优先级,增加一个信号量S,用于在写进程到达后封锁后续的读者
Semaphorewrite=1;
Semahpore