信号量应用问题:
1.写出程序描述下列前趋关系。
S1->S2, S1->S3, S2->S4, S2->S5 , S3->S6, S4->S7, S5->S7, S6->S7
Var s1,s2, s3,s4:semaphore:=0, 0, 0, 0;
Begin
Parbegin
P1: begin
….;
V(s1);
V(s1);
End;
P2: begin
P(s1);
…;
V(s2);
V(s2);
End;
P3: begin
P(s1)
…
V(s3)
End;
P4: begin
P(s2);
…
V(s4);
P5: begin
P(s2);
..;
V(s4);
End;
P6: begin
P(s3)
..
V(s4)
End;
P7:begin
P(s4);
P(s4);
P(s4);
…
End;
Parend
end
2. 请用信号量实现4×100(4人,每人100米)接力赛的同步过程。
提示:前趋图同步问题,可设4个进程,三个信号量,进程1只设V操作,进程4只设P操作,其余进程先做P 操作再做V操作。
Var s1,s2,s3:semaphore:=0, 0, 0; Begin
Parbegin
Athlete1: begin
Run 100m;
V(s1);
End;
Athlete2: begin
P(s1)
Run 100m;
V(s2);
End;
Athlete3: begin
P(s2) ;
Run 100m;
V(s3);
End;
Athlete4: begin
P(s3);
Run 100m;
End;
Parend
end
3.设公共汽车上,司机和售票员的活动分别是:
司机:售票员:
启动车辆上乘客
正常行车关车门
到站停车售票
开车门
下乘客
在汽车不断地到站、停车、行驶过程中,这两个活动有什么同步关系?
请用信号量机制实现他们的同步。
/-假定初始状态为停车状态,引入信号量Stop和Run:
BEGIN
semaphore Stop,Run;
Stop:=Run:=0;
CoBegin
Driver: BEGIN
Repeat
Wait(Run);
启动车辆;
正常行驶;
到站停车;
Signal(Stop); Until False;
END;
Conductor:BEGIN
Repeat
上乘客;
关车门;
Signal(Run);
售票;
Wait(Stop);
开车门;
下乘客;
Until False;
END;
CoEnd;
END;
生产者消费者问题:
1.桌上有一个可以容纳两个水果的盘子,每次只能放或取一个水果。
爸爸放苹果妈妈放橘子,两个儿子
吃苹果,两个女儿吃橘子。试用信
号量和P、V操作,编写实现爸爸、
妈妈、儿子和女儿的并发工作程
序。
Mutex实现互斥放或取水果。
empty盘子可放水果数
Apple 盘子中放的苹果数
Orange 盘子中放的橘子数
Semaphore mutex=1;
Semaphore empty=2; Semahpore apple=0; Semahpore orange=0; Main()
{
Cobegin
Father();
Mother();
Son();
Daughter();
;
Coend)
}
Father()
{
While(true)
{ p(empty)
P(mutex)
放苹果
V(mutex)
V(apple)}
}
Mother()
{
While(true)
{ p(empty)
P(mutex)
放橘子
V(mutex)
V(orange)}
}
Son()
{
While(true)
{ p(apple)
P(mutex)
取苹果
V(mutex)
V(empty)}
}
Daughter()
{
While(true)
{ p(orange)
P(mutex)
取橘子
V(mutex)
V(empty)}
}