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





2006-3-20 16:07


