理发师问题
来源:互联网 发布:php好不好就业 编辑:程序博客网 时间:2024/05/01 03:02
问题描述:
理发店理有一位理发师、一把理发椅和n把供等候理发的顾客坐的椅子如果没有顾客,理发师便在理发椅上睡觉一个顾客到来时,它必须叫醒理发师如果理发师正在理发时又有顾客来到,则如果有空椅子可坐,就坐下来等待,否则就离开。
The P,V code Using Pascal
1)控制变量waiting用来记录等候理发的顾客数,初值均为0;
2)信号量customers用来记录等候理发的顾客数,并用作阻塞理发师进程,初值为0;
3)信号量barbers用来记录正在等候顾客的理发师数,并用作阻塞顾客进程,初值为0;
4)信号量mutex用于互斥,初值为1
int waiting=0;//等候理发的顾客数
int chairs=n;//为顾客准备的椅子数
semaphore customers=0,barbers=0,mutex=1;
cobegin
barber()
begin
while(TRUE);//理完一人,还有顾客吗?
P(cutomers);//若无顾客,理发师睡眠
P(mutex);//进程互斥
waiting:=waiting–1;//等候顾客数少一个
V(barbers);//理发师去为一个顾客理发
V(mutex);//开放临界区
cut-hair();//正在理发
end
customer()
begin
P(mutex);//进程互斥
if(waiting)
begin
waiting:=waiting+1;//等候顾客数加1
V(customers);//必要的话唤醒理发师
V(mutex);//开放临界区
P(barbers);//无理发师,顾客坐着养神
get-haircut();//一个顾客坐下等理/
end
else
V(mutex);//人满了,走吧!
end
coend
- 理发师问题
- 理发师问题
- 理发师问题
- 理发师问题
- 理发师问题
- 理发师问题
- 睡眠理发师问题
- 睡眠理发师问题
- 睡眠理发师问题
- 信号量实现理发师问题
- 加强版理发师问题
- 嗜睡的理发师问题
- 理发师睡眠问题
- 【操作系统】【信号量】理发师问题
- 睡眠理发师问题
- 理发师问题的实现
- 哲学家问题,理发师问题 代码
- 《理发师》
- RUP 统一软件开发过程介绍
- 一步一步来
- 跨平台团队协作项目源码管理软件Mercurial客户端TortoiseHg
- 腾讯QQ使用的八大非常规秘籍
- 发一个网络摄像机实时演示图片!
- 理发师问题
- C/C++异常处理的对比
- Google 菜市场(Android Market)上不去的解决方法
- 【生活技能】如何洗白衣服
- Ext JS + jQTouch + Raphaël = Sencha
- JAVA程序设计
- StrutsTestCase 初体验
- 软件工程师成长之旅----经典版
- 征途:寻找中等规模团队开发的多项目开发需求管理工具