• 大小: 1.61MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-10-12
  • 语言: C/C++
  • 标签: 操作系统  PV  理发师  

资源简介

信号量PV经典问题之沉睡理发师,适用操作系统大作业 C++编写

资源截图

代码片段和文件信息

#include
#include
#include

using namespace std;


int waiting=0;
int chairs=2;                             //为了使结果便于观测仅采用2个等待椅
#define random (rand()*10000)/RAND_MAX    //产生一个随机数代表顾客在时间上随机进入理发店
DWORD a; 
HANDLE barbers=CreateSemaphore(NULL11“barbers“);
HANDLE customers=CreateSemaphore(NULL01“customers“);
HANDLE mutex=CreateMutex(NULLFALSE“mutex“);
//理发师开始为一个顾客理发
void cut_hair()
{  Sleep(10);
   cout<<“Barber working.“<   Sleep(10000);
}
//一个顾客理完发并离开
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;
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     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


评论

共有 条评论