【正确答案】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
【答案解析】