#include<iostream>
#include<windows.h>
#include<cstdio>
using namespace std;
int waiting=0;
int chairs=2; //为了使结果便于观测仅采用2个等待椅
#define random (rand()*10000)/RAND_MAX //产生一个随机数代表顾客在时间上随机进入理发店
DWORD a;
HANDLE barbers=CreateSemaphore(NULL,1,1,"barbers");
HANDLE customers=CreateSemaphore(NULL,0,1,"customers");
HANDLE mutex=CreateMutex(NULL,FALSE,"mutex");
//理发师开始为一个顾客理发
void cut_hair()
{ Sleep(10);
cout<<"Barber working."<<endl;
Sleep(10000);
}
//一个顾客理完发并离开
void get_haircut()
{ Sleep(10000);
cout<<"One custmer finished"<<endl;
}
DWORD WINAPI ThreadCustomer(LPVOID lpParam)
{
WaitForSingleObject(mutex,INFINITE);
cout<<"One custmer enter."<<endl;
if(waiting<chairs)
{
cout<<"Still have seats. waiting."<<endl;
waiting++;
ReleaseSemaphore(customers,1,NULL);
ResumeThread(customers);\
ReleaseMutex(mutex);
WaitForSingleObject(barbers,INFINITE);
cout<<endl<<endl;
get_haircut();
}
else
{
cout<<"Full, the custmer left"<<endl;
ReleaseMutex(mutex);
}
return 0;
}
DWORD WINAPI ThreadBarber(LPVOID lpParam)
{
while(true)
{
WaitForSingleObject(customers,INFINITE);
WaitForSingleObject(mutex,INFINITE);
waiting--;
ReleaseSemaphore(barbers,1,NULL);
ResumeThread(barbers);
ReleaseMutex(mutex);
cut_hair();
}
return 0;
}
int main()
{
HANDLE customerThread;
HANDLE barberThread=CreateThread(NULL,0,ThreadBarber,NULL,0,NULL);
while(true)
{
Sleep(random);
cout<<endl;
customerThread=CreateThread(NULL,0,ThreadCustomer,NULL,a,NULL);
cout<<endl;
}
return 0;
}
没有合适的资源?快使用搜索试试~ 我知道了~
操作系统信号量PV经典问题:沉睡的理发师
共13个文件
pdb:2个
exe:1个
dsp:1个
5星 · 超过95%的资源 需积分: 31 51 下载量 94 浏览量
2012-01-26
15:44:52
上传
评论 3
收藏 1.61MB RAR 举报
温馨提示
信号量PV经典问题之沉睡理发师,适用操作系统大作业 C++编写
资源推荐
资源详情
资源评论
收起资源包目录
Task 3.1-Sleeping Barber.rar (13个子文件)
Task 3.1-Sleeping Barber
SleepingBarber.cpp 2KB
SleepingBarber.ncb 41KB
SleepingBarber.opt 48KB
SleepingBarber.dsw 536B
SleepingBarber.plg 794B
SleepingBarber.dsp 3KB
Debug
vc60.idb 185KB
SleepingBarber.pch 5.07MB
SleepingBarber.exe 244KB
vc60.pdb 140KB
SleepingBarber.pdb 1.04MB
SleepingBarber.obj 53KB
SleepingBarber.ilk 366KB
共 13 条
- 1
资源评论
- Domiapp2013-11-23挺好玩的,只是不是很形象
- lianni52013142015-07-01不错不错,挺好的
大道寺知世
- 粉丝: 2
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功