打瞌睡的理发师问题

有一个理发师,一把理发椅和 N 把供等候理发的顾客坐的椅子。
如果没有顾客,则理发师便在理发师椅子上睡觉;
当一个顾客到来时,必须唤醒理发师进行理发;
如果理发师正在理发时又有顾客来到,则如果有空椅子可坐,他就坐下来等,如果没有空椅子,他就离开。
为理发师和顾客各编一段程序(伪代码)描述他们的行为,要求不能带有竞争条件。

这个问题和生产者消费者相似,顾客可以看做生产的产品,理发师可以看组是消费者,沙发有空位,顾客就坐进去,沙发有顾客,理发师就去理发。但是要主要,这个和生产者消费者最大的一个区别就是:

  • 生产者生产出一个产品后,当缓存没有空位时,会一直等待下去,直到有空位出现
  • 而此问题最关键的地方就是:如果没有空位,顾客直接离开,不会加入阻塞队列
int count = 0; //沙发上的顾客数,用来计数
semaphore customer = 0 ; //沙发上的顾客数,用来阻塞唤醒理发师
semaphore barber = 0; //表示正在理发的理发师数量
semaphpre mutex = 1;//理发师
void barber{while(true){P(customer);//如果沙发有顾客,就起来理发,负责阻塞进不去,理发师打瞌睡P(mutex);//进临界区,保护的是count,防止多个客户操作count--;V(mutex); V(barber);//理发。。。。}
}//顾客
//注意:如果没有空位了,顾客直接离开,不会进行阻塞,否则理完发离开,所以不需要while循环
void customer{P(mutex);//进临界区if(count < N)//沙发没满就坐进去理发,否则直接走{count++;V(mutex); V(customer);P(barber);//如果理发师忙,则等待}else{V(mutex);}
}

进程同步——打瞌睡的理发师问题相关推荐

  1. 进程同步与互斥——哲学家就餐问题源码实现(dining philosopher’s problem)

    传送门: 进程同步与互斥--信号量(实现锁.条件变量) 进程同步与互斥--哲学家就餐问题源码实现(dining philosopher's problem) 进程同步与互斥--读者/写者问题源码实现( ...

  2. 操作系统信号量与P、V操作 初步认识整理

    初步接触,若有不足之处,请各位不吝赐教.谢谢! 首先介绍:信号量 信号量包括整型信号量.结构型信号量.二值信号量. ① 整型信号量 最初,将信号量定义为一个共享的整型量,它保存可供使用的唤醒数目.如果 ...

  3. 计算机操作系统(第3版) (2018年清华大学出版社出版的图书)

    参见:https://baike.baidu.com/item/%E8%AE%A1%E7%AE%97%E6%9C%BA%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%EF%B ...

  4. 《深入理解计算机系统》CSAPP第3版术语索引表

    <深入理解计算机系统>几乎做到了只讲对程序员"有用的"原理,所以这本书性价比非常高.并没有在体系结构和操作系统的许多实现问题上纠缠. 第三版的英文原版是有index表的 ...

  5. 操作系统知识点大总结【进程同步与互斥】

    文章目录 一.临界与同步 1.临界资源与临界区 2.进程同步 3.信号量实现进程同步 二.进程互斥 1.进程互斥的软件实现方法 2.进程互斥的硬件实现方法 3.信号量实现互斥 4.信号量进程互斥 三. ...

  6. 信号量实现理发师问题

          理发店里有一位理发师.一把理发椅和n把供等候理发的顾客坐的椅子.如果没有顾客,理发师在理发椅上睡觉.一个顾客来到时,叫醒理发师,如果理发师正在理发时有顾客到来,则如果有空椅子可以坐,就坐下 ...

  7. 操作系统 | PV操作七大经典问题 生产者消费者 读者写者 哲学家进餐 理发师理发睡觉 和尚打水 吸烟者 吃水果

    一.生产者消费者问题 生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案 ...

  8. 操作系统 第六章 进程同步

    进程同步 同步与互斥 同步-进程之间需要协作 同步定义 互斥-进程之间需要共享资源 临界资源 互斥: 交叉执行处理过程中的问题 - 生产者消费者问题 共享变量处理不好会造成数据不一致 Producer ...

  9. 操作系统笔记(6) 进程同步(Process Synchronization)

    文章目录 一.背景 二. 临界区(Critical-Section) 理论上的解决方案要满足(单核状态): Peterson's Solution 进程的情况 简单的形式? 三. 硬件同步机制(Syn ...

最新文章

  1. python json.loads()中文问题-python处理json数据中的中文
  2. java 中文 图片_java之服务器端写图片中文乱码
  3. 使用泛型实现单例提供者(原创翻译)
  4. 红黑树和平衡二叉树的区别_面试题精选红黑树(c/c++版本)
  5. Zephyr_Bindings目录作用
  6. JUC编程入门(高并发)
  7. C++学习笔记——opencv2模块(图像处理)
  8. Android开发-API指南-uses-feature(1)
  9. Metal 案例03:大批量顶点数据的图形渲染
  10. 便利贴--14{GIF录制工具}
  11. html5 表格向下,HTML5 教程之HTML 表格
  12. 家谱世表怎么写?4个要点不注意,会让人贻笑大方的
  13. 分布式一致性算法—— 2PC与3PC
  14. SaaS从业者必读:一文读懂如何衡量与优化SaaS公司的关键指标
  15. android ui v2ex,V2EX-android
  16. java中图片加载不出来的_请问图片加载不出来是为什么
  17. LeetCode 图解 | 1214.查找两颗二分搜索树之和
  18. 使用字典模拟超市购物行为。假设使用字典存储超市中的商品及单价,输入购买商品名称,通过字典的get方法得到该商品名称所对应的商品单价。购物结束后,若购物总金额超过了200元,则享受九折优惠。否则,需要全
  19. Stroop effect检验
  20. 数据库设计与 API 接口文档

热门文章

  1. CSS 兼容性(陆续更新)
  2. 解决在IE11浏览器上,css样式不起作用的问题
  3. 联创第一记-关于号簿管家改造:用户注销跟用户密码改造bug
  4. MySQL 2021-03-29
  5. 华中科大校长:教授被称为“叫兽”是教育的悲哀
  6. python怎么计算总值_python小白系列Day2—python基础以及pandas基础
  7. js实现页面数据的筛选
  8. [技术杂谈][原创]利用Win32DiskImager来备份复制系统镜像
  9. linux cmds - ldconfig
  10. KVM虚拟机常用命令