接上一篇进程之间的同步和互斥,生产者-消费者问题常常用来解决多进程并发执行过程中的同步和互斥问题。
原理如下:
把一个长度为n(n>0)的有界缓冲区与一群生产者进程P1,P2,…,Pm和一群消费者进程C1,C2,…,Ck联系起来,只要缓冲区未满,生产者就可以往缓冲区中放产品,只要缓冲区未空,消费者就可以从中取走产品消耗。
(1)同步条件:生产者只有在至少有一个临界区的单元为空的时候,才能生产产品,消费者只有在至少有一个临界区被填上产品的时候,才能消耗产品,所以设置两个同步变量,avail为生产者的私有变量,初值为n,full为消费者的私有变量,初始值为0。
(2)互斥条件:生产者和消费者不能同时访问临界资源,所以设置一个互斥变量mutex初始值为1.
生产者进程: 消费者进程:
p(avail) p(full)
p(mutex) p(mutex)
生成一个产品 消费一个产品
v(full) v(avail)
v(mutex) v(mutex)