应用题 2.试修改下面生产者一消费者问题解法中的错误。
producer:
begin
repeat
producer an item in nextp;
wait(mutex):
wait(full);
buffer(in):=nextp:
signal(mutex);
until falsei
end
consumer:
begin
repeat
wait(mutex);
wait(empty);
nextc:=buffer(out):
out:=out+1:
signal(mutex):
consumer item in nextc;
until false;
end
【正确答案】producer:
begin
repeat
producer an item in nextp;
wait(mutex):
wait(fuU):
/*应为wait(empty),而且还应该在wait(utex)的前面*/
buffer(in):=nextp:
/*缓冲池数组游标应前移:in:=(in+1)mod n:*/
signal(mutex):
/*signal(full):*/
until false;
end
consumer;
begin
repeat
wait(mutex):
wait(empty):
/*应为wait(full),而且还应该在wait(mutex)的前面*/
nextc:=buffer(out);
out:=out+1;
/*考虑循环,应改为:out:=(out+1)mod n:*/
signal(mutex):
/*signal(empty)*/
consumer item in nextc:
until false;
end
【答案解析】