应用题 12.试修改下面生产者一消费者问题解法中的错误。
producer:
begin
repeat
producer an item in nextp;
wait(mutex);
wait(full);
buffer(in):=nextp;
signal(mutex);
until false;
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(full);
/*应为wait(empty),而且还应该在wait(mutex)的前面*/
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
【答案解析】