题目描述
系统中有多个生产者进程和多个消费者进程,共享一个能存放 1000 件产品的环形缓冲区(初始为空)。当缓冲区未满时,生产者进程可以放入其生产的一件产品,否则等待;当缓冲区未空时,消费者进程可以从缓冲区取走一件产品,否则等待。要求一个消费者进程从缓冲区连续取出 10 件产品后,其他消费者进程才可以取产品。请使用信号量 P,V(wait(),signal())操作实现进程间的互斥与同步,要求写出完整的过程,并说明所用信号量的含义和初值
代码
semaphore full = 0, empty = 1000, mutex = 1, consumermutex = 1;
int in = 0, out = 0;
item buffer[1000];
void consumer(){
do{
wait(consumermutex);
for(int i=0; i<10; i++){
wait(full);
wait(mutex);
nextc = buffer[out];
out = (out+1)%1000;
signal(mutex);
signal(empty);
consume the item in nextc;
}
signal(consumsermutex);
}while(true);
}
void producer(){
do{
produce an item nextp;
wait(empty);
wait(mutex);
buffer[in] = nextp;
in = (in+1)%1000;
signal(mutex);
signal(full);
}while(true);
}
void main(){
cobegin
consumer();
producer();
coend
}