【正确答案】此题主要考查进程与死锁的相关转换内容。
(1)为解决并行所带来的死锁问题,在wait操作中引入AND条件,其基本思想是将进程在整个运行过程中所需要的所有临界资源一次性地全部分配给进程,用完后一次性释放。
(2)解决生产者一消费者问题可描述如下:
var mutex,empty,full:semaphore:=1,n,0;
buffer:array[0..n-1]of item;
in,out:integer:=0,0;
begin
parbegin
producer:begin
repeat
produce an item in nextp;
wait(empty);
wait(s1,s2,s3,…,sn);
//s1,s2,s3,…,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,k3,…,kn为执行生产者进程除full外其余的条件
wait(mutex);
nextc:=buffer(out);
out:=(out+1)mod n;
signal(mutex);
signal(empty);
signal(k1,k2,k3,…,kn);
consume the item in nextc;
until false;
end
parend
end
【答案解析】