一个关于死锁的问题
我上操作系统的课的时候,遇到了一个我不理解的地方。问题是这样的,利用记录型信号量解决生产者——消费者问题。
Var mutex,empty,full:semaphore :=1,n,0;
buffer : array[0,...,n -1] of item;
in, out : integer := 0, 0;
begin
parbegin
proceducer :begin
repeat
.
.
.
producer an item nextp;
.
.
.
wait(empty); //这句不能与下句调换
wait(mutex);
buffer(in) := nextp;
in := (in+1)mod n;
signal(mutex);
signal(full);
until false;
end
comsumer :begin
repeat
wait(full); //这句也不能与下句调换
wait(mutex);
nextc := buffer(out);
out :=(out+1) mod n;
singal(mutex);
signal(empty);
consumer the item in nextc;
until false;
end
parend
end
这个代码虽然好像长了些,但是还是比较容易理解的,我所不理解的是我不知道为什么如果先wait(mutex)就会引起死锁。
请大家帮帮我。