操作系统复习题

更新时间: 试题数量: 购买人数: 提供作者:

有效期: 个月

章节介绍: 共有个章节

收藏
搜索
题库预览
(考研真题)系统中有多个生产者进程和消费者进程,共享用一个可以存1000个产品的缓冲区(初始为空),当缓冲区未满时,生产者进程可以放入1件其生产的产品,否则等待;当缓冲区不空时,消费者进程可以取走1件产品,否则等待。要求1个消费者进程从缓冲区连续取出10件产品后,其他消费者进程才可以取产品,请用信号量P,V(或wait()、signal())操作实现进程间的互斥和同步,要求写出完整的过程;并指出所用信号量的含义和初值。 buffer array [1000]; //存放产品的缓冲区 buffer nextp; //用于临时存放生产者生产的产品 buffer nextc [10]; //用于临时存放消费者取出的产品 semaphore empty=1000; //空缓冲区的数目 semaphore full=0; //满缓冲区的数目 semaphore mutex1=1; //用于生产者之间的互斥 semaphore mutex2=1; //用于消费者之间的互斥 int in=0; //指示生产者的存位置 int out=0; //指示消费者的取位置 cobegin Producer() //生产者进程 { Produce an item put in nextp; //生产一个产品,存在临时缓冲区 P(empty); //申请一个空缓冲区 P(mutex1); //生产者申请使用缓冲区 array[in]=nextp; //将产品存入缓冲区 in=(in+1)%1000; //指针后移 V(mutex1); //生产者缓冲区使用完毕,释放互斥信号量 V(full); //增加一个满缓冲区 } Consumer() //消费者进程 { P(mutex2); //消费者申请使用缓冲区 for(int i = 0;i<10;i++) //一个消费者进程须从缓冲区连续取走 10 件产品 { P(full); //申请一个满缓冲区 nextc[i]=array[out]; //将产品取出,存于临时缓冲区 out=(out+1)%1000; //指针后移 V(empty); //增加一个空缓冲区 } V(mutex2); //消费者缓冲区使用完毕,释放互斥信号量 Consume the items in nextc; //消费掉这 10 个产品 } coend