试修改下面生产者-消费者问题解法中的错误。
    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
【答案解析】