计算机操作系统(第三版)汤小丹 梁红兵 汤小瀛西安电子科技大学出版社
consume the item in enxtc;
until false;
end
31.什么是AND信号量?试利用AND信号量写出生产者一消费者问题的解法。 答:为解决并行带来的死锁问题,在wait 操作中引入AND 条件,其基本思想是将进
程在整个运行过程中所需要的所有临界资源,一次性地全部分配给进程,用完后一次性释放。
解决生产者-消费者问题可描述如下:
var mutex,empty,full: semaphore:=1,n,0;
buffer: array[0,...,n-1] of item;
in,out: integer:=0,0;
begin
parbegin
14
producer: begin
repeat
produce an item in nextp;
wait(empty);
wait(s1,s2,s3,...,sn); //s1,s2,...,sn为执行生产者进程除empty 外其余的条件 wait(mutex);
buffer(in):=nextp;
in:=(in+1) mod n;
signal(mutex);
signal(full);
signal(s1,s2,s3,...,sn);
until false;
end
consumer: begin
repeat
wait(full);
wait(k1,k2,k3,...,kn); //k1,k2,...,kn 为执行消费者进程除full 外其余的条件 wait(mutex);
nextc:=buffer(out);
out:=(out+1) mod n;
signal(mutex);