资源简介
信号量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
相关资源
- 基于C++的银行家算法模拟实现
- WPViewPDF v3.11 VCL/.NET/ActiveX (x32/x64)
- 生产者消费者问题源码-MFC实现-进程模
- 操作系统实验 进程调度 高响应比优先
- 操作系统文件管理C++代码实现
- 嗜睡的理发师进程同步与实现c++
- 安徽大学操作系统实验八基于扫描的
- 安徽大学操作系统实验四主存空间的
- 操作系统——银行家算法
- 操作系统_生产者消费者c++、mfc实现
- 磁盘调度c++模拟实现计算机操作系统
- 操作系统课设源代码 模拟进程的并
- 64位操作系统下win10、win7,VC6的所有问
- 操作系统课程设计之死锁检测
- 操作系统课程设计 哲学家进餐问题完
- 2010-2011华南理工大学操作系统课程设
- 操作系统进程间通信,用mfc实现
- 2013-2014华南理工大学操作系统课程设
- 操作系统实验 请求分页存储管理(包
- 进程/作业调度:时间片轮转调度算法
- 嵌入式实时操作系统μC/OS-III(英文
- 操作系统课程设计:进程/作业调度
- 操作系统 进程调度 多级队列反馈
- 自己动手写操作系统 于渊 高清带书签
- 操作系统读者写者写优先
- 消费者与生产者
- 操作系统八大调度算法c/c++实现
- 模拟操作系统的实现 C语言
- 操作系统实验可视化界面
- 操作系统概念:进程调度算法FCFS、
评论
共有 条评论