第2章补充题1(1)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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张沙发的等候室和一个放有一张理发椅的理发室组成。没有顾客要理发时,理发师便去睡觉。当一个顾客走进理发店时,如果所有的沙发都已被占用,他便

相关文档
最新文档