问题描述

理发店有一位理发师,一把理发椅和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的更多相关文章

  1. 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 ...

  2. Synchronization (computer science)

    过程同步.数据同步. In computer science, synchronization refers to one of two distinct but related concepts: ...

  3. some notions about os

    1. Multiprogramming system provide an environment in which the various resources (like CPU,memory,an ...

  4. java 虚拟机与并发处理几个问题简要(二)

    六.两个重要的概念性问题: 1.同步:要保持数据的一致性,就需要一种保证并发进程正确执行顺序的机制.这种机制就是 进程同步(Process Synchronization). 竞争资源的多个进程按着特 ...

  5. OS面试题(转载)

    转载自:http://placement.freshersworld.com/power-preparation/technical-interview-preparation/os-intervie ...

  6. 分布式计算 要不要把写日志独立成一个Server Remote Procedure Call Protocol

    w https://en.wikipedia.org/wiki/Remote_procedure_call In distributed computing a remote procedure ca ...

  7. verilog FAQ(zz)

    1. What is the race condition in verilog? Ans :The situation when two expressions are allowed to exe ...

  8. Spring单例Bean和线程安全

    Spring的bean默认都是单例的,这些单例Bean在多线程程序下如何保证线程安全呢?例如对于Web应用来说,Web容器对于每个用户请求都创建一个单独的Sevlet线程来处理请求,引入Spring框 ...

  9. Microsoft Sync Framework下的快速开发同步程序

    Microsoft Sync Frameworks简称MSF,是一个综合的同步平台,MSF支持应用程序,服务,设备的在线以及离线同步.MSF主要有以下几个部件组成:     * Sync Servic ...

  10. Summary: Process & Tread

    refer to http://www.programmerinterview.com/index.php/operating-systems/thread-vs-process/ A process ...

随机推荐

  1. Scratch 怎么打开SB文件怎么打开

    扩展名是.sb( )的文件均可以用匹配版本的scratch或比匹配版本高的scratch打开,列表如下:类型 可打开.sb ···1.4(1.3).sb2 ···2.0.sb3··· 3.0或3.0b ...

  2. Java工程中如何读取配置文件中参数信息

    Java中读取配置文件中参数: 方法一:通过JDK中Properties来实现对配置文件的读取. Properties主要用于读取Java的配置文件,不同的编程语言有自己所支持的配置文件,配置文件中很 ...

  3. Vue 实战项目: 硅谷外卖(1)

    第 1 章: 准备 1.1. 项目描述 1) 此项目为外卖 WebApp(SPA) 2) 包括商家, 商品, 购物车, 用户等多个子模块 3) 使用 Vue 全家桶+ES6+Webpack 等前端最新 ...

  4. 路由与交换,cisco路由器配置,静态路由

    网络是一个大型的拓扑结构,在路由表中,最重要的是管理距离和度量值 管理距离 管理距离用来确定路由的优先级.管理距离的范围是0-255之间的整数值.值越低代表优先级越高.0代表最高优先级.并且只有直连路 ...

  5. Python 类属性和方法

    import types class Dog(object): __slots__ = ("name", "color", "info") ...

  6. Java并发之显式锁和隐式锁的区别

    Java并发之显式锁和隐式锁的区别 在面试的过程中有可能会问到:在Java并发编程中,锁有两种实现:使用隐式锁和使用显示锁分别是什么?两者的区别是什么?所谓的显式锁和隐式锁的区别也就是说说Synchr ...

  7. python字符串列表元组序列操作

    Table of Contents generated with DocToc python系列-字符串.列表.元组的操作 序列的访问及运算符 序列通用操作 访问单个元素 切片访问一部分元素 序列的复 ...

  8. 01-css3之过渡

    一.介绍 过渡(transition)是CSS3中具有颠覆性的特征之一,我们可以在不使用 Flash 动画或 JavaScript 的情况下,当元素从一种样式变换为另一种样式时为元素添加效果,经常和 ...

  9. GeoGebra简单使用

    上课过程中的一些知识和一丢丢工具使用例子 1.常用的变量输入 2.好用的函数检视工具 3.使用动态的移动,关键是右键-开启跟踪 4.输入指令(推荐用英文输入,因为有提示)

  10. Word文档创建目录

    一.以设置两级目录为例: 1.设置两个标题,标题1对应第一级目录,标题2对应第二级目录. 点击标题1,点击修改: 设置好样式和格式: 同理设置标题2. 2.创建多级目录: 选择级别1,关联到标题1,设 ...