下图中有3个进程P0、P1、P2和3个缓冲区B0、B1、B2。进程间借助于相邻缓冲区传递消息,即Pi每次从Bi取一条消息,经加工送入B(i+1)mod3中,B0、B1、B2分别可存放3、2、2个消息,初始时,仅B0有一条消息,利用信号量机制解决P0、P1、

admin2014-04-17  38

问题 下图中有3个进程P0、P1、P2和3个缓冲区B0、B1、B2。进程间借助于相邻缓冲区传递消息,即Pi每次从Bi取一条消息,经加工送入B(i+1)mod3中,B0、B1、B2分别可存放3、2、2个消息,初始时,仅B0有一条消息,利用信号量机制解决P0、P1、P2之间的同步及互斥关系。

选项

答案实现如下: semaphore mutext(1)=1,mutex(2)=1,mutex(3)=1;//互斥信号量及其赋予初值 semaphore full(0)=1,full(1)=0,full(2)=0; //同步信号量,full(i)表示Bi是否有数据 semaphore empty(0)=2,empty(1)=2,empty(2)=2,//同步信号量,empty(i)表示Bi是否有空间 ProceSS ProC(i) { P(full(i); //申请Bi缓冲区的数据 P(empty((i+1)mod3)); //申请B(i+1)mod3缓冲区的空间 P(mutex(i)); //对Bi缓冲区互斥访问 从Bi取出一条消息; V(mutex(i)); 加工; P(mutex((i+1)mod3)); //对B(i+1)mod3互斥访问 将消息送到B(i+1)mod3中; V(mutex((i+1)mod3)); V(full((i+1)mod3)); //B(i+1)mod3缓冲区增加一个数据 V(empty(i)); //Bi缓冲区增加一个空间 } 说明:同步和互斥的解题思路如下。 (1)分清哪些是互斥问题(互斥访问I临界资源的),哪些是同步问题(具有前后执行顺序要求的)。 (2)对互斥问题要设置互斥信号量,不管具有互斥关系的进程有几个或几类,通常都只设置一个互斥信号量,且初值为1,代表一次只允许一个进程对临界资源访问。 (3)对同步问题要设置同步信号量,通常同步信号量的个数与参与同步的进程种类有关,即同步关系涉及几类进程,就有几个同步信号量。同步信号量表示该进程是否可以开始或该进程是否已经结束。 (4)在每个进程中用于实现互斥的PV操作必须成对出现;用于实现同步的PV操作也必须成对出现,但可以分别出现在不同的进程中;在某个进程中如果同时存在互斥与同步的P操作,则其顺序不能颠倒,必须先执行对同步信号量的P操作,再执行对互斥信号量的P操作,但V操作的顺序没有严格要求。

解析
转载请注明原文地址:https://jikaoti.com/ti/qjajFFFM
0

最新回复(0)