P、V操作习题答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
••信号量应用问题:End;
Pare nd.写出程序描述下列前趋关系。1 end
S2->S4, S1->S3, S1->S2,
S2->S5 , S3->S6, S4->S7,
2•请用信号量实现4X 10(4人,每S5->S7, S6->S7
人100Var s1,s2, s3,s4:semaphore:=0, 0米, )接力赛的同步过程。
提示:前趋图同步问题,可设0, 0; 4个进程,三个信号量,进程 1 只设BeginV操作,进程4只设ParbeginP操作,其余进程先做P操作再做V P1:begi n 操作。
Var s1,s2,s3:semaphore:=0, 0, 0;.; …
Begin V(s1);
Parbegin V(s1);
Athlete1: begin End;
Run 100m; P2: begin
V(s1); P(s1);
End; …;
Athlete2: begin V(s2);
P(s1) V(s2);
Run 100m; End;
V(s2); P3: begin
End; P(s1)
Athlete3: begin …P(s2) ;V(s3)
P(s2);
Athlete4: begin …P(s3);V(s4);
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 :号量Stopl BEGIN
.桌上有一个可以 xx 两个水果的
Run 100m; End;
V(s3); P4: begin
End; Run 100m; P5: begin
End;
盘子,每次只能放或取一个水果爸
semaphore Stop,Run;
爸放苹果妈妈放橘子,两个儿子
Stop:=Run:=0; 吃苹果,两个女儿吃橘子。试用信CoBegin 号量和BEGIN
P、V 操作,编写实现爸爸、Driver: 妈妈、儿子和女儿的并发工作程Repea 序。t
Mutex 实现互斥放或取水果。Wa emptyit(Run);
盘子可放水果数
Apple 盘子中放的苹果数启
Orange 动车辆;盘子中放的橘子数
Semaphore mutex=1 正
Semaphore empty=2;常行驶;
Semahpore apple=0到
Semahpore oran ge=0站停车;
Main() Si
{
gnal(Stop);
Cobegin Until
Father(); False;
Mother(); END;
Son();
Conductor:BEGIN
Daughter();
Repea
; t
Coe nd)上
}
乘客;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;
放橘子配车间
CoEnd V(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 之。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(); /程。说明进程间