(8分)系统中有多个生产者进程和多个消费者进程,共享一个能存放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=0; 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; i <= 10; ++i){ P(full); //判断缓冲区是否有产品 P(mutex2); //互斥访问缓冲区 从缓冲区取出一件产品; V(mutex2); //互斥访问缓冲区 V(empty); //腾出一个空位 消费这件产品; } V(mutex1) } }
【评分说明】 ①信号量的初值和含义都正确给2分。 ②生产者之间的互斥操作正确给1分;生产者与消费者之间的同步操作正确给2分;消费者之间互斥操作正确给1分。 ③控制消费者连续取产品数量正确给2分。 ④仅给出经典生产者-消费者问题的信号量定义和伪代码描述最多给3分。 ⑤若考生将题意理解成缓冲区至少有10件产品,消费者才能开始取,其他均正确,得6分。 ⑥部分完全正确,酌情给分。
登录后提交答案
暂无评论,来抢沙发