PV操作习题答案.docx
《PV操作习题答案.docx》由会员分享,可在线阅读,更多相关《PV操作习题答案.docx(11页珍藏版)》请在冰豆网上搜索。
![PV操作习题答案.docx](https://file1.bdocx.com/fileroot1/2023-2/6/be958d9b-f6c6-4de2-87e8-b78f1e864c7f/be958d9b-f6c6-4de2-87e8-b78f1e864c7f1.gif)
PV操作习题答案
…信号量应用问题:
End;
Parend.写出程序描述下列前趋关系。
1end
S2->S4,S1->S3,S1->S2,
S2->S5,S3->S6,S4->S7,
2.请用信号量实现4×100(4人,每S5->S7,S6->S7
人100Vars1,s2,s3,s4:
semaphore:
=0,0,米)接力赛的同步过程。
提示:
前趋图同步问题,可设0,0;4个进程,三个信号量,进程1只设BeginV操作,进程4只设ParbeginP操作,其余进程先做P操作再做VP1:
begin操作。
Vars1,s2,s3:
semaphore:
=0,0,0;.;…
BeginV(s1);
ParbeginV(s1);
Athlete1:
beginEnd;
Run100m;P2:
begin
V(s1);P(s1);
End;…;
Athlete2:
beginV(s2);
P(s1)V(s2);
Run100m;End;
V(s2);P3:
begin
End;P(s1)
Athlete3:
begin…P(s2);V(s3)
Run100m;End;
V(s3);P4:
begin
End;P(s2);
Athlete4:
begin…P(s3);V(s4);
Run100m;P5:
begin
End;P(s2);
Parend..;
end
V(s4);
3.设公共汽车上,司机和售票员的活End;
动分别是:
P6:
begin
司机:
售票员:
P(s3)
启动车辆..xx乘客
V(s4)正常行车关车门
到站停车售票End;
P7:
begin开车门P(s4);P(s4);下乘客P(s4);在汽车不断地到站、停车、行驶过END;
程中,这两个活动有什么同步关系?
CoEnd;
END;
请用信号量机制实现他们的同步。
假定初始状态为停车状态,引入信/-生产者消费者问题:
和Run:
号量Stop1BEGIN
.桌上有一个可以xx两个水果的
盘子,每次只能放或取一个水果。
semaphoreStop,Run;
爸爸放苹果妈妈放橘子,两个儿子Stop:
=Run:
=0;
吃苹果,两个女儿吃橘子。
试用信CoBegin
号量和BEGIN
P、V操作,编写实现爸爸、Driver:
妈妈、儿子和女儿的并发工作程Repea
序。
t
Mutex实现互斥放或取水果。
Wa
emptyit(Run);
盘子可放水果数
Apple盘子中放的苹果数启
Orange动车辆;盘子中放的橘子数
Semaphoremutex=1;正
Semaphoreempty=2;常行驶;
Semahporeapple=0;到
Semahporeorange=0;站停车;
Main()Si
{
gnal(Stop);
CobeginUntil
Father();False;
Mother();END;
Son();
Conductor:
BEGIN
Daughter();
Repea
;t
Coend)上
}
乘客;Father()关{
车门;
While(true)Si
{p(empty)gnal(Run);
P(mutex)
售
放苹果票;
V(mutex)WaV(apple)}it(Stop);
}开
Mother()车门;
{
下
While(true)乘客;
{p(empty)Until
P(mutex)
False;
放橘子配车间
CoEndV(mutex)
}
V(orange)}
Provider_A()}
{while(true)Son()
{
{p(emptya);
p(sa);While(true)
{p(apple)p(mutex);
P(mutex)将零件A放入仓库;
v(mutex);取苹果
v(fulla);V(mutex)
v(sb);V(empty)}
}
}
}
Daughter()
Provider_B(){
{while(true)While(true)
{p(orange){p(emptyb);
P(mutex)p(sb);
取橘子p(mutex);
V(mutex)将零件B放入仓库;
V(empty)}v(mutex);
}
v(fullb);
2,A和Bv(sa);、有一个仓库存放两种零件m最大库容量各为个。
有一车间不断}
进行装配,每次各取一个。
A和B}
地取为了避免零件锈蚀,遵循线入库者先Assembling_Shop()
出库的原则。
有两组供应商分别不断{while(true)
{p(fulla);,为保证齐A地供应和B(每次一个)套和合理库存,当某种零件的数量比p(fullb);
(另一种数量超过nn对数量大的零件的进货,集中补充数装配零件;
操作正确实现、量少的零件。
试用PVv(mutex);
之。
v(emptya);
v(emptyb);
}mutex=1,semaphore
fulla=fullb=0,emptya=emptyb=m,}
3、有一个仓库,可以存放Asa=sb=n;和B两种产品,仓库的存储空间足够大,但要main()
求:
{CoBegin
Provider_A();每次只能存入一种产品(X或/Y);
零件/。
M和时正整数。
其中,N/Provider_B();
、P试用“存放A”、“存放B”和供应商B零件/
的入库过B与产品A操作描述产品V装Assembling_Shop();//程。
说明进程间的相互制约关系,应设置哪些信号量?
B,则AA-B如果只放A不放则用P、V操作写出其同步算法;,最多可放M-1个,如果多放一个B可以多放一个A。
修改上述算法,使得它对写者优先,即一旦有写者到达,后续的读者A,则BBB-A如果只放不放都必须等待,而无论是否有读者在读则如果多放一个最多可放N-1个,A,文件。
可以多放一个B。
(该问题的又一提法:
在一个飞机订票系统中,多个用户共享一个数/2-BEGIN据库。
多用户同时查询是可以接受的,Mutex,SA,SB:
semaphore;但若一个用户要订票需更新数据库Mutex:
=1;
时,其余所有用户都不可以访问数据SA:
=M-1;
库。
请画出用户查询与订票的逻辑框SB:
=N-1;
图parBegin
(等价于同步进程的描述的图式表
示)。
processPA
为了提高写者的优先级,增加一个信Begin
号量Sloop:
,用于在写进程到达后封锁后续的读者P(SA);
Semaphoremutex=1;P(Mutex);
Semaphorewrite=1;存放A;
Semahpores=1;
V(Mutex);
Intcount=0;V(SB);
Main()Gotoloop;
{
End;
Cobegin
Reader();processPB
Writer();Begin
Coendloop:
;
}
P(SB);
Reader()
P(Mutex);
{while(true)存放B;
{
V(Mutex);
P(s);V(SA);
P(mutex);Gotoloop;
If(count==0)End;
p(write);parEnd;
Count++;END;
V(s);北大/91
读文件;
P(mutex)读者写者问题:
Count--;
If(count==0)1、多个进程共享一个文件,其中只读v(write);文件的程值为读者,其余只写文件的V(mutex);称为写者。
读者可以同时读,但写者}只能独立地写。
.
}
End
Writer()
{
Porcess由西向东While(true)
Begin{p(s);
P(swe);P(write);
P(siwe);写文件;Iwe:
=iwe+1;
V(write);
Ifiwe=1htenp(mutex);V(s);
V(siwe);}
过桥;}
P(siwe);
Iwe:
=iwe-1;
Ifiwe=0thenv(mutex);辆车,2.某一桥只有一车道,载重为4V(siwe);V操作实现两方向的车过桥。
用P、V(swe)本题本质上可以认为是读者写者End;问题,往同一个方向的车可以认为是理发师睡觉问题:
读者,往相反方向的车可以认为是写1.者。
但是由于桥的重量有限,增加了(睡眠的理发师问题)理发店有一个等候室(其中有N把椅子)和一个读者之间的互斥。
本题的临界资源显理发室(一把理发椅组成)。
如果没有然是单通道的桥,首先如果桥上有向顾客来理发,理发时就在理发椅上睡东方向的车,那么向西方向的车一定觉,如果一个走进理发店,发现等候4辆,同一方向的不能过,如果超过室的椅子都坐满就离开理发店;如果车也不能过,需要互斥。
理发师正忙于理发,那么该顾客就坐,mutex实现双向车子互设信号量在一把空椅子上等待;若理发师正在,斥通行;信号量sewswe表示由西向睡觉,则顾客就唤醒他。
用P、V操作初值为东与由东向西的负荷数,4;整写出工作流程。
表示各方向的车子数,数型iew,iwe
考点:
用PV原语实现同步iew,iwesiew,siwe0初值为;实现对Semaphorecostomers=0;;等候的1的互斥访问,初值为顾客数(不包括正在理发的)Semaphorebarbers=0;由东向西的车子;等候顾客Process
的理发师数Begin
Semaphoremutex=1;
P(sew);
Intwaiting=0;P(siew);等候的顾客数(还没有理发,实际是Iew:
=iew+1;customers的备份,为了读取信号量的当前值);Ifiew=1thenp(mutex);V(siew);
Voidbarber(void)过桥;{while(true)P(siew);
{P(customers);Iew:
=iew-1;
P(mutex);
Ifiew=0thenv(mutex);
waitingV(siew);=waiting–1;
V(barbers);
V(sew)
V(mutex);动的同步。
Customerscut_hair();表示正在等待复印的顾客数}
Operator代表操作员的状态,只能取顾客进程
1或0Voidcustomers(void);
Waiting表示正在等待的顾客数;{P(mutex);
Mutex实现对waiting的互斥访问if(waiting{waiting=waiting+1;
customers,V(customers);operator,mutex:
semaphore;
V(mutex);
waiting:
inteter;P(barbers);
customers=0;get_hair();}
operator=0;else{V(mutex);}
mutex=1;
}
processoperator
begin提示:
考虑一下理发师(barber)loop:
)睡觉;(1
(2)为重复的下列活动:
p(customers);顾客理发;
复印;)重复的下列活顾客(customers
V(operator);)理发;)在椅子上等候;(3(4动:
Gotoloop;离开;End;1)处要考察是显然,理发师在(否有顾客等候理发,如果没有,理发Processcoutomeri2)处理发师等待最先进师睡觉;在(Begin
入理发店的xx唤醒,开始理发。
P(mutex);
3顾客在()处先看是否有座位,Ifwaiting<5then没有则离开;等候理发的顾客在(4)Begin
处被理发师唤醒(最先理发的顾客要Waiting=waiting+1;唤醒理发师);理发结束后离开。
V(custormers);在这两个活动中,从资源的角度V(mutex);来看,理发师是顾客争用的资源,用P(operator);0barber信号量表示,初值为;除此P(mutex);n张椅子,信号以外,顾客还要争用Waiting=waiting-1;量customers表示等候理发的顾客数,V(mutex);0;最后设置信号灯变量mutex初值为End资对动个这用于两活源、barberElse。
1customers的互斥,初值为
Begin
2.复印室里有一个操作员为顾客复印V(mutex);资料,有把椅子供顾客休息等待复5End;印。
如果没有顾客,则操作员休息,End;
当顾客来到复印室时,如果有空椅子则坐下来,并唤醒复印操作员;如果4没有空椅子必须离开复印室。
试用信.理发师问题:
一个理发店有一个入5理发店内有一个可站口和一个出口。
操作实现顾客和操作员活V、P号量几.位顾客的站席
区、4个单人沙发、3个理发师及其专用理发工具、一个收银台。
新来的顾客坐在沙发上等
待;没有空沙发时,可在站席区等待;站席区满时,只能在入口外等待。
理发师可从事理
发、收银和休息三种活动。
理发店的活动满足下列条件:
1)休息的理发师是坐地自己专用的理发椅上,不会占用顾客的沙发;2)处理休息状态的理发师可为在沙发上等待时间最长的顾客理发;
3)理发时间长短由理发师决定;
4)在站席区等待时间最长的顾客可坐到空闲的理发上;
5)任何时刻最多只能有一个理发师在收银。
试用信号量机制或管程机制实现理发师进程和顾客进程。
.