第2章补充题1(1)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例1:抽烟问题:有一个烟草代理商(Agent)和3个抽烟者(smoker)。每个抽烟者连续不断地制造香烟并吸掉它。但是,制造一支香烟需要三种材料:烟草、烟纸和火柴。三个抽烟者中,一人有烟纸,一人有烟叶,一人有火柴。烟草代理商源源不断地供应这三种材料。他将两种材料一起放在桌上,持有另一种材料的吸烟者即可制造一支香烟并抽掉它。当此抽烟者抽香烟时,他发出一个信号通知烟草代理商,烟草代理商马上给出另外两种材料,如此循环往复。试用信号量同步烟草代理商和3个抽烟者。
解:Semaphore smoker[3]; //初始0,三个抽烟者
Semaphore material[3]; //初始0,三种原料
Semaphore agent; //初始1,供应商
Int turn; //初始0,轮到谁
Agent:
While (1) {
Wait(agent);
Signal(smoker[turn]);
Signal(material[(turn+1)%3]);
Signal(material[(turn+2)%3]);
Turn=(turn+1)%3;
}
Smoker-i:
While (1) {
wait(smoker[i]);
wait(material[(i+1)%3]);
wait(material[(i+2)%3]);
signal(agent);
}
例2;从读卡机上读进n张卡片,然后复制一份,要求复制出来的卡片与读进来的卡片完全一致。这一工作由3个进程get、copy、put 以及两个缓冲区buffer1和buffer2完成。get进程的功能是把一张卡片信息从读卡机上读进buffer1;进程copy的功能是把buffer1中的信息复制到buffer2;进程put的功能是取出buffer2中的信息并从行式打印机上打印输出。试用P、V操作完成这3个进程间的尽可能并发正确执行的关系(用程序或框图表示),并指明信号量的初值。
解答:这3个进程间的关系可用下图来表示:
分析这3个进程之间的关系,可以得知,get和copy进程之间通过buffer1进行合作,这是一种生产者-消费者问题;同理,进程copy 和put之间通过buffer2进行合作,两者之间也是一种生产者-消费者问题。
为此,设计互斥信号量mutex1,mutex2来实现对buffer1和buffer2的互斥访问;为实现get和copy之间的同步,设置两个信号量semptybuffer1和sfullbuffer1,分别表示缓冲区buffer1是空的还是满
的;为实现copy和put之间的同步,设置两个信号量semptybuffer2、sfullbuffer2,分别表示缓冲区buffer2是空的还是满的。
Var mutex1,mutex2,semptybuffer1,sfullbuffer1,semptybuffer2,sfullbuffer2:semaphore:=1,1,1,0,1,0;
Get:begin
Repeat
从读卡机读入一张卡片信息;
P(semptybuffer1);
P(mutex1);
将信息放入buffer1;
V(sfullbuffer1);
V(mutex1);
Until false;
End
Copy:begin
Repeat
P(sfullbuffer1);
P(mutex1);
从buffer1复制信息;
V(semptybuffer1);
V(mutex1);
P(semptybuffer2);
P(mutex2);
将信息复制放入buffer2;
V(sfullbuffer2);
V(mutex2);
Until false;
End;
Put:begin
Repeat
P(sfullbuffer2);
P(mutex2);
从buffer2取出信息;
V(semptybuffer2);
V(mutex2);
把信息从打印机输出;
Until false;
End;
例3:在4×100m接力赛中,4个运动员之间存在如下关系:运动员1跑到终点把接力棒交给运动员2;运动员2一开始处于等待状态,在接到运动员1传来的接力棒后才能往前跑,他跑完100m后交棒给运动员3;运动员3也只有接到运动员2传来的接力棒后才能往前跑,他跑完100m后交棒给运动员4;运动员4接棒后跑完全程,试用信号量机制进行描述。
分析:在本题中,4个运动员相当于4个进程,他们处于并发运行状态。运动员1跑完100m后发信号给运动员2,运动员2原来处于等待该信号的过程,在接到运动员1发来的信号后他才能开始运行,他在跑完100m后发信号给运动员3;同样,运动员3在接到运动员2发来的信号后才能开始跑,跑完后发信号给运动员4;运动员4接到运动员3发来的信号后跑完全程。
解答:根据分析,引入3个信号量S1、S2、S3,其初始值均为0。4×100m 接力赛描述如下:
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;
Athlete2:begin
P(s3);
Run 100m;
End;
Parend
End
例4:嗜睡的理发师问题。一个理发店由一个有N张沙发的等候室和一个放有一张理发椅的理发室组成。没有顾客要理发时,理发师便去睡觉。当一个顾客走进理发店时,如果所有的沙发都已被占用,他便