作業系統經典問題 理髮師問題

2021-09-14 04:46:38 字數 633 閱讀 1711

理髮師問題描述如下:

理髮店包含一間接待室和一間工作室,有一名理髮師,接待室內有n(n≥1)把椅子,而工作室只有1把椅子。如果沒有顧客,理髮師就去睡覺;如果理髮師在睡覺;則顧客會喚醒他;如果理髮師在忙且接待室有空閒椅子,那麼此顧客會坐在其中1把空閒的椅子上等待;如果來時所有椅子都有人,那麼顧客離去。請採用訊號量機制解決該理髮師問題(用偽**描述)。

分析:(1)設定理髮師的資源訊號量為barber,初值為初始狀態可用的資源數,故設barber初值為0(因為沒有顧客的時候理髮師在睡覺呀)。

(2)設定顧客的資源訊號量為customers,初值為0(剛開始沒有顧客來)。

(3)用互斥訊號量mutex實現程序互斥。

(4)用變數waiting來記錄等待的顧客數,判斷有沒有空閒椅子。

偽**如下:

semaphore barber,customers,mutex;

barber = customers = 0,mutex = 1;

int waiting = 0;

parbegin

process barber

}process customers{

wait(mutex);//一次只能有乙個顧客進行以下操作,即訪問椅子

if(waiting更新

理髮師問題c 作業系統

這是關於理髮師問題的c 程式,如果對其中函式有不理解的可以看我另一篇部落格程序相關函式彙總解釋,對照著看,可能方便你理解 include include include using namespace std define chairs 5 椅子數目 define max count 10 顧客最多...

作業系統理髮師問題P V操作

理髮店裡有一位理髮師 一把理髮椅和n 把供等候理髮的顧客坐的椅子。如果沒有顧客,理髮師便在理髮椅上睡覺 當乙個顧客到來時,它必須叫醒理髮師 如果理髮師正在理髮時又有顧客來到,那麼,如果有空椅子可坐,顧客就坐下來等待,否則就離開理髮店。解法一 可以從題中發現,我們在需要的訊號量有 顧客數量 開局沒有顧...

作業系統 同步互斥 理髮師睡覺問題

理髮店有一位理髮師,一把理髮椅和n把供等候的顧客坐的椅子。如果沒有顧客,理髮師在理髮椅上睡覺 當有乙個顧客到來時,他必須先喚醒理髮師 如果顧客來時理髮師正在理髮,如果有空椅子,坐下等待,否則離開。用p,v操作解決上述問題中的同步和互斥關係。將顧客看作n個生產者,理髮師是1個消費者。理髮師和椅子是臨界...