注册 登录
编程论坛 Windows论坛

一个关于死锁的问题

Bilicon 发布于 2006-03-20 16:07, 618 次点击

我上操作系统的课的时候,遇到了一个我不理解的地方。问题是这样的,利用记录型信号量解决生产者——消费者问题。


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)就会引起死锁。


请大家帮帮我。

3 回复
#2
sunnvya2006-03-23 20:47

看不懂

#3
kai6082006-05-07 13:50
a
#4
Olivia2006-05-09 22:47
我是初学者,我想是不是因为应该先考虑空间多少再发信号量,不然空间不减一,信号量就不 能正确反映空间是否已满!
1