Process Synchronization-Example 2
问题描述
理发店有一位理发师,一把理发椅和N把供等候的顾客坐的椅子。
如果没有顾客,理发师在理发椅上睡觉;
当有一个顾客到来时,他必须先唤醒理发师;
如果顾客来时理发师正在理发,如果有空椅子,坐下等待,否则离开。
用P,V操作解决上述问题中的同步和互斥关系。
分析
将顾客看作N个生产者,理发师是1个消费者。
理发师和椅子是临界资源,故顾客间是互斥关系;
理发师和顾客是同步关系。
信号量设置
Semaphore barberReady = 互斥量,只能取0或1
Semaphore accessSeat = 互斥量,如果为1,表明椅子数可以增加或减少,相当于给椅子加锁,避免两个顾客同时坐一把椅子
Semaphore num_wait = 坐在椅子上等待的顾客数
int seat_free 空着的椅子数目
参考(https://en.wikipedia.org/wiki/Sleeping_barber_problem)
解答
/*顾客进程*/
void customer()
{
while(true)
{
P(accessSeat); //试图坐下
if(seat_free > )
{
seat_free--; //坐下
V(num_wait); //试图唤醒理发师,
V(accessSeat); //不用再锁着椅子
P(baberReady); //等待理发师ready
理发;
}
else
{
V(accessSeat); //释放加在椅子上的锁
离开;
}
}
} /*理发师进程*/
void barber()
{
while(true)
{
P(num_wait); //尝试获得一位顾客,如果没有,去睡觉
P(accessSeat); //尝试获得椅子锁,更改空闲椅子数目
seat_free++; //空椅子加1
V(baberReady); //理发师准备好了
V(accessSeat); //无需继续锁着椅子
理发;
}
}
Process Synchronization-Example 2的更多相关文章
- Efficient ticket lock synchronization implementation using early wakeup in the presence of oversubscription
A turn-oriented thread and/or process synchronization facility obtains a ticket value from a monoton ...
- Synchronization (computer science)
过程同步.数据同步. In computer science, synchronization refers to one of two distinct but related concepts: ...
- some notions about os
1. Multiprogramming system provide an environment in which the various resources (like CPU,memory,an ...
- java 虚拟机与并发处理几个问题简要(二)
六.两个重要的概念性问题: 1.同步:要保持数据的一致性,就需要一种保证并发进程正确执行顺序的机制.这种机制就是 进程同步(Process Synchronization). 竞争资源的多个进程按着特 ...
- OS面试题(转载)
转载自:http://placement.freshersworld.com/power-preparation/technical-interview-preparation/os-intervie ...
- 分布式计算 要不要把写日志独立成一个Server Remote Procedure Call Protocol
w https://en.wikipedia.org/wiki/Remote_procedure_call In distributed computing a remote procedure ca ...
- verilog FAQ(zz)
1. What is the race condition in verilog? Ans :The situation when two expressions are allowed to exe ...
- Spring单例Bean和线程安全
Spring的bean默认都是单例的,这些单例Bean在多线程程序下如何保证线程安全呢?例如对于Web应用来说,Web容器对于每个用户请求都创建一个单独的Sevlet线程来处理请求,引入Spring框 ...
- Microsoft Sync Framework下的快速开发同步程序
Microsoft Sync Frameworks简称MSF,是一个综合的同步平台,MSF支持应用程序,服务,设备的在线以及离线同步.MSF主要有以下几个部件组成: * Sync Servic ...
- Summary: Process & Tread
refer to http://www.programmerinterview.com/index.php/operating-systems/thread-vs-process/ A process ...
随机推荐
- 使用maven构建 ssm项目 tomcat7插件运行报错, Invalid byte tag in constant pool: 60
错误日志: [WARNING] [WARNING] Some problems were encountered while building the effective settings[WARNI ...
- OS-DOS/CMD/Windows/各类软件快捷键等使用总结
一.快捷键 很多软件的快捷键使用相通,在不确定的情况下,先试试其他软件的快捷键的使用方法 Windows电脑快捷键 HP惠普笔记本 win+E 打开文件管器 win+D 显示桌面 win+L 锁计算机 ...
- Python pip高级用法
1.pip 高级用法为了便于用户安装和管理第三方库和软件,越来越多的编程语言拥有自己的包管理工 具,如 nodejs 的 npm, ruby 的 gem. Python 也不例外,现在 Python ...
- MD5中使用16进制
MD5中使用16进制消息摘要 分类: java_secruity2012-12-28 13:11 719人阅读 评论(0) 收藏 举报 消息摘要 由于数据在计算机中的表示,最终以二进制的形式存在,所以 ...
- 学习Salesforce | Platform Developer Ⅰ 平台初级开发认证考试指南及备考资源
一.平台开发人员考试计划 Salesforce平台开发人员初级认证面向具有在Lightning平台上构建自定义应用程序的知识.技能和经验的个人. 该认证考核Lightning平台的基本编程能力,并会使 ...
- cxGrid增加一栏显示checkBox的设置方法
鉴于本人首次设定cxGrid的CheckBox的时候费了很大劲,发现很多人都会碰到这个问题,现在总结一下,以供各位互相学习借鉴. 步骤如下(不分先后): 1. cxGrid添加完自己所需的所有字段后, ...
- Word文档创建目录
一.以设置两级目录为例: 1.设置两个标题,标题1对应第一级目录,标题2对应第二级目录. 点击标题1,点击修改: 设置好样式和格式: 同理设置标题2. 2.创建多级目录: 选择级别1,关联到标题1,设 ...
- Python-selenium 元素定位
1.id定位find_element_by_id() 通过id属性定位元素,如果id是动态变化的话不能用id来进行定位 2.name定位find_element_by_name() 通过name属性定 ...
- vs 类型定义及语句,随机数
1 类型定义: 1)小数: 类型 变量名 赋值 decimal d : d=1.2m float ...
- v&n赛 内存取证题解(已更新)
题目是一个raw的镜像文件 用volatility搜索一下进程 有正常的notepad,msprint,还有dumpit和truecrypt volatility -f mem.raw --profi ...