P、V操作习题答案

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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(); /程。说明进程间

相关文档
最新文档