P、V操作习题答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
…信号量应用问题: End;
Parend .写出程序描述下列前趋关系。1 end
S2->S4, S1->S3, S1->S2,
S2->S5 , S3->S6, S4->S7,
2. 请用信号量实现4×100(4人,每S5->S7, S6->S7
人100Var s1,s2, s3,s4:semaphore:=0, 0, 米)接力赛的同步过程。
提示:前趋图同步问题,可设0, 0; 4个进程,三个信号量,进程1只设Begin
V操作,进程4只设 Parbegin P操作,其余进程先做P操作再做V P1: begin 操作。
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)
Run 100m; End;
V(s3); P4: begin
End; P(s2);
Athlete4: begin … P(s3); V(s4);
Run 100m; P5: begin
End; P(s2);
Parend ..;
end
V(s4);
3.设公共汽车上,司机和售票员的活End;
动分别是: P6: begin
司机:售票员: P(s3)
启动车辆 .. 上乘客
V(s4) 正常行车关车门
到站停车售票 End;
P7:begin 开车门 P(s4);
P(s4); 下乘客 P(s4);
在汽车不断地到站、停车、行驶过 END;
程中,这两个活动有什么同步关系? CoEnd;
END;
请用信号量机制实现他们的同步。假定初始状态为停车状态,引入信/-生产者消费者问题:和Run:号量Stop1 BEGIN
.桌上有一个可以容纳两个水果的
盘子,每次只能放或取一个水果。 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 orange=0; 站停车;
Main() Si
{
gnal(Stop);
Cobegin Until
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;
放橘子配车间
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和B v(sa); 、有一个仓库存放两种零件 m最大库容量各为个。有一车间不断 }
进行装配,每次各取一个。A和B }
地取为了避免零件锈蚀,遵循线入库者先 Assembling_Shop()
出库的原则。有两组供应商分别不断 { while(true)
{ p(fulla); ,为保证齐A地供应和B(每次一个)套和合理库存,