系统中有多个生产者进程和多个消费者进程,共享一个能存放1000件产品的环形缓冲区(初始为空)。当缓冲区未满时,生产者进程可以放入其生产的一件产品,否则等待;当缓冲区未空时,消费者进程可以从缓冲区取走一件产品,否则等待。要求一个消费者进程从缓冲区连续取出10

admin2015-12-30  36

问题 系统中有多个生产者进程和多个消费者进程,共享一个能存放1000件产品的环形缓冲区(初始为空)。当缓冲区未满时,生产者进程可以放入其生产的一件产品,否则等待;当缓冲区未空时,消费者进程可以从缓冲区取走一件产品,否则等待。要求一个消费者进程从缓冲区连续取出10件产品后,其他消费者进程才可以取产品。
请使用信号量P,V(wait(),signal())操作实现进程间的互斥与同步,要求写出完整的过程,并说明所用信号量的含义和初值。

选项

答案这是典型的生产者和消费者问题,只对典型问题加了一个条件,只需在标准模型上新加一个信号量,即可完成指定要求。 设置四个变量mutex1、mutex2、empty和full,mutex1用于一个控制一个消费者进程一个周期(10次)内对于缓冲区的控制,初值为1;mutex2用于进程单次互斥的访问缓冲区,初值为1;empty代表缓冲区的空位数,初值为0;full代表缓冲区的产品数,初值为1000,具体进程的描述如下: semaphore mutex1=1; semaphore mutex2=1; semaphore empty=n; semaphore full=0; producer(){ while(1){ 生产一个产品; P(empty);//判断缓冲区是否有空位 P(mutex2);//互斥访问缓冲区 把产品放入缓冲区; V(mutex2);//互斥访问缓冲区 V(full);//产品的数量加1 } } consumer(){ while(1){ P(mutex1)//连续取10次 for(int i=0;0,i<=10;++i){ P(full);//判断缓冲区是否有产品 P(mutex2);//互斥访问缓冲区 从缓冲区取出一件产品; V(mutex2);//互斥访问缓冲区 V(empty);//腾出一个空位 消费这件产品; } V(mutex1) } }

解析
转载请注明原文地址:https://kaotiyun.com/show/goRi777K
0

最新回复(0)