這是關於理髮師問題的c++程式,如果對其中函式有不理解的可以看我另一篇部落格程序相關函式彙總解釋,對照著看,可能方便你理解
#include
#include
#include
using
namespace std;
#define chairs 5
//椅子數目
#define max_count 10
//顧客最多人數
handle mutex =
createmutex
(null
,false,l"mutex");
//用來實現程序的互斥(l是指後面的字元使用unicode格式)
handle barbers =
createsemaphore
(null,1
,1, l"barbers");
//進行執行緒間的同步
handle customers =
createsemaphore
(null,0
, chairs, l"customers");
int count =0;
//顧客
int waiting =0;
//等待的顧客數
int finish =0;
//理髮完畢的顧客數
//隨機函式
intrandom()
//顧客程序
dword winapi customer
(lpvoid pparm2)
else
waiting++
;resumethread
(customers)
;//喚醒理髮師程序
releasemutex
(mutex)
;//釋放互斥量,以便其他執行緒使用
waitforsingleobject
(barbers, infinite)
;//等待理髮
}else
return0;
}//理髮師執行緒
dword winapi barber
(lpvoid pparm1)
return0;
}int
main()
cout <<
"已經為"
<< finish <<
"個顧客理髮了,是否停止營業?"
<< endl <<
"輸入 y 或"
"n"<
//提示是否關門
cin >> close_door;
if(close_door ==
'y')
else
} hthreadcustomer =
createthread
(null,0
, customer,
null,0
,null);
}return0;
}
作業系統經典問題 理髮師問題
理髮師問題描述如下 理髮店包含一間接待室和一間工作室,有一名理髮師,接待室內有n n 1 把椅子,而工作室只有1把椅子。如果沒有顧客,理髮師就去睡覺 如果理髮師在睡覺 則顧客會喚醒他 如果理髮師在忙且接待室有空閒椅子,那麼此顧客會坐在其中1把空閒的椅子上等待 如果來時所有椅子都有人,那麼顧客離去。請...
作業系統理髮師問題P V操作
理髮店裡有一位理髮師 一把理髮椅和n 把供等候理髮的顧客坐的椅子。如果沒有顧客,理髮師便在理髮椅上睡覺 當乙個顧客到來時,它必須叫醒理髮師 如果理髮師正在理髮時又有顧客來到,那麼,如果有空椅子可坐,顧客就坐下來等待,否則就離開理髮店。解法一 可以從題中發現,我們在需要的訊號量有 顧客數量 開局沒有顧...
作業系統 同步互斥 理髮師睡覺問題
理髮店有一位理髮師,一把理髮椅和n把供等候的顧客坐的椅子。如果沒有顧客,理髮師在理髮椅上睡覺 當有乙個顧客到來時,他必須先喚醒理髮師 如果顧客來時理髮師正在理髮,如果有空椅子,坐下等待,否則離開。用p,v操作解決上述問題中的同步和互斥關係。將顧客看作n個生產者,理髮師是1個消費者。理髮師和椅子是臨界...