理髮店有一位理髮師,一把理髮椅和n把供等候的顧客坐的椅子。
如果沒有顧客,理髮師在理髮椅上睡覺;
當有乙個顧客到來時,他必須先喚醒理髮師;
如果顧客來時理髮師正在理髮,如果有空椅子,坐下等待,否則離開。
用p,v操作解決上述問題中的同步和互斥關係。
將顧客看作n個生產者,理髮師是1個消費者。
理髮師和椅子是臨界資源,故顧客間是互斥關係;
理髮師和顧客是同步關係。
訊號量設定1、 semaphore barberready = 0 互斥量,只能取0或1
2、 semaphore accessseat = 1 互斥量,如果為1,表明椅子數可以增加或減少,
相當於給椅子加鎖,避免兩個顧客同時坐一把椅子
3、 semaphore num_wait = 0 坐在椅子上等待的顧客數
4、 int seat_free = n 空著的椅子數目
/*顧客程序*/
void customer()
else
}}/*理髮師程序*/
void barber()
}
作業系統程序同步之睡覺的理髮師問題
問題描述 理髮店理有一位理髮師 一把理髮椅和n把供等候理髮的顧客坐的椅子,要求 如果沒有顧客,理髮師便在理髮椅上睡覺 乙個顧客到來時,它必須叫醒理髮師 如果理髮師正在理髮時又有顧客來到,則如果有空椅子可坐,就坐下來等待,否則就離開問題分析 理髮師和顧客是同步關係,理髮師等待顧客來,然後為顧客服務,顧...
理髮師問題c 作業系統
這是關於理髮師問題的c 程式,如果對其中函式有不理解的可以看我另一篇部落格程序相關函式彙總解釋,對照著看,可能方便你理解 include include include using namespace std define chairs 5 椅子數目 define max count 10 顧客最多...
作業系統經典問題 理髮師問題
理髮師問題描述如下 理髮店包含一間接待室和一間工作室,有一名理髮師,接待室內有n n 1 把椅子,而工作室只有1把椅子。如果沒有顧客,理髮師就去睡覺 如果理髮師在睡覺 則顧客會喚醒他 如果理髮師在忙且接待室有空閒椅子,那麼此顧客會坐在其中1把空閒的椅子上等待 如果來時所有椅子都有人,那麼顧客離去。請...