作業系統程序同步之睡覺的理髮師問題

2021-10-07 09:44:44 字數 730 閱讀 4960

問題描述

理髮店理有一位理髮師、一把理髮椅和n把供等候理髮的顧客坐的椅子,要求:

如果沒有顧客,理髮師便在理髮椅上睡覺

乙個顧客到來時,它必須叫醒理髮師

如果理髮師正在理髮時又有顧客來到,則如果有空椅子可坐,就坐下來等待,否則就離開

問題分析

​ 理髮師和顧客是同步關係,理髮師等待顧客來,然後為顧客服務,顧客來了之後叫醒理髮師,執行上是有先後順序的,所以應該有兩個同步訊號量,且散在兩個程序裡;另一方面,顧客對椅子的操作又是互斥的,屬於競爭關係,所以需要互斥訊號量來保證椅子的數量準確。

3. p、v操作(偽**)

int waiting =0;

// 等候理髮師 顧客坐的椅子數

int chairs = n;

// 為顧客準備的椅子數

semaphore customers =0;

// 等候的顧客數

semaphore barbers =0;

// 空閒的理髮師數

semaphore mutex =1;

// 互斥訊號量,保證waiting++操作完整進行

cobegin

process barber()

}process customer_i()

else

v(mutex)

;// 沒椅子,顧客走人

}coend

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

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

嗜睡的理髮師 程序同步問題

有乙個理髮師,一把理髮椅和 n 把供等候理髮的顧客坐的椅子。如果沒有顧客,則理髮師便在理髮師椅子上睡覺 當乙個顧客到來時,必須喚醒理髮師進行理髮 如果理髮師正在理髮時又有顧客來到,則如果有空椅子可坐,他就坐下來等,如果沒有空椅子,他就離開。為理髮師和顧客各編一段程式 偽 描述他們的行為,要求不能帶有...

理髮師問題c 作業系統

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