生产者-消费者问题
系统中有一组生产者进程和一组消费者进程,生产者进程每次生一个产品放入缓冲区,消费者进程每次从缓冲区中取出一个产品并使用
生产者和消费者共享一个初始为空,大小为n的缓冲区
缓冲区没有满的时候,生产者才能把产品放入缓冲区,否则必须等待。
只有缓冲区没空的时候,消费者才能从中取出产品,否则必须等待。
缓冲区是一种临界资源,各进程必须互斥访问
semaphore mutex=1;//互斥信号量,实现对缓冲区的互斥访问
semaphore empty=n;//同步信号量,代表空闲缓冲区的数量
semaphore full=0;//同步信号量,代表产品的数量
producer(){while(1){生产一个产品;P(empty);//消耗一个空闲缓冲区P(mutex);放入;V(mutex);V(full);//消耗一个非空缓冲区,代表增加了一个产品}
}
consumer(){while(1){P(full);//消耗一个产品P(mutex);取出;V(mutex);V(empty);//增加一个空闲缓冲区使用产品;}
}
互斥的P操作,一定要在实现同步的P操作之后,顺序不能颠倒
但是V操作可以随意交换顺序,不会导致进程阻塞