有一个可以存放n件产品的缓冲器,今有m个生产者,每个生产者每次生产一件物品放入缓冲器中;还有k个消费者,每个消费者每次可从缓冲器中取出一件物品去消费;不允许有两个或两个以上的生产者(或消费者)同时去存物品(或取物品),但允许有一个生产者(或消费者)在存物品

admin2017-10-26  35

问题 有一个可以存放n件产品的缓冲器,今有m个生产者,每个生产者每次生产一件物品放入缓冲器中;还有k个消费者,每个消费者每次可从缓冲器中取出一件物品去消费;不允许有两个或两个以上的生产者(或消费者)同时去存物品(或取物品),但允许有一个生产者(或消费者)在存物品(或取物品)时有一个消费者(或生产者)可以去取物品(或存物品)。试用PV操作来协调它们的工作。

选项

答案可以定义如下4个信号量: S1:生产者之间的互斥,由于只允许一个生产者存物品时有一个消费者取物品,故它的初值取为“1”。 S2:消费者之间的互斥,同理,它的初值取为“1”。 SP:表示是否可以把物品存入缓冲器,由于缓冲器容量为n,故SP的初值取为n。 SG:表示缓冲器中是否存有物品,显然,它的初值应该为“0”,表示还没有物品。 于是每个生产者Prodllcer i(i=1,2,…,m)和每个消费者Consumer j(j=1,2,…,k)可如下并发执行: begin B:array[0,…,n-1]of integer; k:=t:=0; S1:=S2:=1;SP:=n;SG=0; cobegin process producer i(i=1,2,…,m) begin L1:produce a producer; P(SP); P(S1); B[k]:=product; k:=(k+1)mod n; V(SG); V(S1); goto L1 end; process consiamer j(j=1,…,k) begin L2:P(SG); P(S2); take a product from B[t]; t:=(t+1)mod n: V(SP); V(S2); consume; goto L2; end; coend; end;

解析
转载请注明原文地址:https://kaotiyun.com/show/Bikx777K
0

最新回复(0)