试修改下面生产者一消费者问题解法中的错误。 producer: begin repeat …… producer an item in nextp; wait

admin2018-08-12  26

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

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

相关试题推荐
最新回复(0)