熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> 操作系統 >> 正文

4.理發師問題

2013-11-15 15:54:26  來源: 操作系統 

理發師問題(Barber Problem)

  

  問題描述

  理發店理有一位理發師一把理發椅和n把供等候理發的顧客坐的椅子如果沒有顧客理發師便在理發椅上睡覺一個顧客到來時它必須叫醒理發師如果理發師正在理發時又有顧客來到則如果有空椅子可坐就坐下來等待否則就離開

  

  The PV code Using Pascal

  

  )控制變量waiting用來記錄等候理發的顧客數初值均為

  )信號量customers用來記錄等候理發的顧客數並用作阻塞理發師進程初值為

  )信號量barbers用來記錄正在等候顧客的理發師數並用作阻塞顧客進程初值為

  )信號量mutex用於互斥初值為

  int waiting=//等候理發的顧客數

  int chairs=n//為顧客准備的椅子數

  semaphore customers=barbers=mutex=;

  cobegin

    barber()

    begin

      while(TRUE);//理完一人還有顧客嗎?

      P(cutomers);//若無顧客理發師睡眠

     P(mutex);//進程互斥

     waiting:=waiting–;//等候顧客數少一個

     V(barbers);//理發師去為一個顧客理發

     V(mutex);//開放臨界區

     cuthair();//正在理發

    end

    customer()

    begin

     P(mutex);//進程互斥

     if(waiting)

     begin

        waiting:=waiting+;//等候顧客數加

       V(customers);//必要的話喚醒理發師

       V(mutex);//開放臨界區

       P(barbers);//無理發師顧客坐著養神

       gethaircut();//一個顧客坐下等理/

     end

    else

      V(mutex);//人滿了走吧!

    end

  coend

 

    返回《操作系統之PV金典》


From:http://tw.wingwit.com/Article/program/czxt/201311/24187.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.