-
大小: 1.61MB文件類型: .rar金幣: 2下載: 0 次發(fā)布日期: 2023-10-12
- 語(yǔ)言: C/C++
- 標(biāo)簽: 操作系統(tǒng)??PV??理發(fā)師??
資源簡(jiǎn)介
信號(hào)量PV經(jīng)典問題之沉睡理發(fā)師,適用操作系統(tǒng)大作業(yè)
C++編寫

代碼片段和文件信息
#include
#include
#include
using?namespace?std;
int?waiting=0;
int?chairs=2;?????????????????????????????//為了使結(jié)果便于觀測(cè)僅采用2個(gè)等待椅
#define?random?(rand()*10000)/RAND_MAX????//產(chǎn)生一個(gè)隨機(jī)數(shù)代表顧客在時(shí)間上隨機(jī)進(jìn)入理發(fā)店
DWORD?a;?
HANDLE?barbers=CreateSemaphore(NULL11“barbers“);
HANDLE?customers=CreateSemaphore(NULL01“customers“);
HANDLE?mutex=CreateMutex(NULLFALSE“mutex“);
//理發(fā)師開始為一個(gè)顧客理發(fā)
void?cut_hair()
{??Sleep(10);
???cout<<“Barber?working.“< ???Sleep(10000);
}
//一個(gè)顧客理完發(fā)并離開
void?get_haircut()
{???Sleep(10000);
cout<<“One?custmer?finished“<
}
DWORD?WINAPI?ThreadCustomer(LPVOID?lpParam)
{
WaitForSingleobject(mutexINFINITE);
cout<<“One?custmer?enter.“<
if(waiting {
cout<<“Still?have?seats.?waiting.“< waiting++;
????
ReleaseSemaphore(customers1NULL);
ResumeThread(customers);\
????????ReleaseMutex(mutex);
WaitForSingleobject(barbersINFINITE);
cout< get_haircut();
}
else
{
cout<<“Full?the?custmer?left“<
ReleaseMutex(mutex);
}
return?0;
}
DWORD?WINAPI?ThreadBarber(LPVOID?lpParam)
{
while(true)
{
WaitForSingleobject(customersINFINITE);
WaitForSingleobject(mutexINFINITE);
waiting--;
ReleaseSemaphore(barbers1NULL);
???????
ResumeThread(barbers);?
ReleaseMutex(mutex);
cut_hair();
}
return?0;
}
int?main()
{
HANDLE?customerThread;
????HANDLE?barberThread=CreateThread(NULL0ThreadBarberNULL0NULL);
?while(true)
?{??
Sleep(random);
????cout< customerThread=CreateThread(NULL0ThreadCustomerNULLaNULL);
cout< ????
}
return?0;
}
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件?????249933??2011-12-30?02:07??Task?3.1-Sleeping?Barber\Debug\SleepingBarber.exe
?????文件?????374880??2011-12-30?02:07??Task?3.1-Sleeping?Barber\Debug\SleepingBarber.ilk
?????文件??????54275??2011-12-30?02:07??Task?3.1-Sleeping?Barber\Debug\SleepingBarber.obj
?????文件????5316280??2011-12-30?01:04??Task?3.1-Sleeping?Barber\Debug\SleepingBarber.pch
?????文件????1090560??2011-12-30?02:07??Task?3.1-Sleeping?Barber\Debug\SleepingBarber.pdb
?????文件?????189440??2011-12-30?02:07??Task?3.1-Sleeping?Barber\Debug\vc60.idb
?????文件?????143360??2011-12-30?02:07??Task?3.1-Sleeping?Barber\Debug\vc60.pdb
?????文件???????1743??2011-12-30?02:07??Task?3.1-Sleeping?Barber\SleepingBarber.cpp
?????文件???????3497??2011-12-30?01:28??Task?3.1-Sleeping?Barber\SleepingBarber.dsp
?????文件????????536??2011-12-30?02:08??Task?3.1-Sleeping?Barber\SleepingBarber.dsw
?????文件??????41984??2011-12-30?02:08??Task?3.1-Sleeping?Barber\SleepingBarber.ncb
?????文件??????48640??2011-12-30?02:08??Task?3.1-Sleeping?Barber\SleepingBarber.opt
?????文件????????794??2011-12-30?02:07??Task?3.1-Sleeping?Barber\SleepingBarber.plg
?????目錄??????????0??2011-12-30?02:07??Task?3.1-Sleeping?Barber\Debug
?????目錄??????????0??2011-12-30?02:08??Task?3.1-Sleeping?Barber
-----------?---------??----------?-----??----
??????????????7515922????????????????????15
評(píng)論
共有 條評(píng)論