2.5 经典的进程同步问题(重点!!!)

  • 一、生产者-消费者问题
  • 二、哲学家进餐问题
  • 三、读者-写者问题

一、生产者-消费者问题

有几个进程?

存在什么模式?

对于生产者-消费者问题,存在两个进程,分别是生产者进程和消费者进程

buffer是生产者和消费者两个进程共享的公共资源,属于临界资源,所以是互斥方式共享buffer。

1、利用记录型信号量解决生产者-消费者问题

可利用互斥信号量mutex实现诸进程对缓冲池的互斥使用;
利用信号量empty和full分别表示缓冲池中空缓冲池和满缓冲池的数量

程序实现

对于producer程序而言,wait(empty)看缓冲区是否还有存储空间,wait(mutex)则是用来申请缓冲区资源

对于consumer程序而言,wait(full)看缓冲区中时候有商品,wait(mutex)则是用来申请缓冲区资源

当缓冲区是满的时候,empty为0,full为n。此时若先执行wait(mutex),再执行wait(empty),会造成生产者申请到缓冲区资源,但是缓冲区没有存储空间来存储商品;而对于消费者进程而言,若先执行wait(mutex),再执行wait(full),那么会导致,消费者申请不到缓冲区资源,此时即使缓冲区有商品,依然无法将商品取出消费。陷入死锁。
生产者在等消费者去消费,消费者在等生产者释放mutex。(死锁的情况)
退出区释放资源的时候没有顺序要求!

2、利用AND型信号量解决生产者-消费者问题

一次性的申请和释放资源型信号量和互斥信号量。

二、哲学家进餐问题

1、利用记录型信号量解决哲学家进餐问题

程序实现

该算法虽然可以保证相邻两人不会同时进餐,但是有可能引起死锁。
因为当五个人同时饿了的时候,大家都会拿起自己左手边的一个筷子,这时每个人只有一只筷子没法进餐,因此也没法释放资源,于是五个人只能等着饿死,陷入死锁。

解决方法:

  • 方法1:至多只允许有四位哲学家同时去拿左边的筷子,最终能保证至少有一位哲学家能够进餐,并在用完后释放出他用过的两只筷子,从而使更多的哲学家能够进餐。
  • 方法2:仅当哲学家的左右两支筷子均可用时,才允许他拿起筷子进餐。
  • 方法3:规定奇数号哲学家先拿他左边的筷子,然后再去拿右边的筷子;偶数号哲学家则相反。

方法1:程序实现

筷子是互斥信号量组
饥饿的哲学家的人数为资源信号量

方法2:利用AND型信号量机制解决哲学家进餐问题

在哲学家进餐问题中,要求每个哲学家先获得两个临界资源(筷子)后方能进餐。本质上是AND同步问题。

方法3:程序实现:

三、读者-写者问题

1、利用记录型信号量解决读者-写者问题

  • 互斥信号量wmutex:实现reader与writer进程间在读或写时的互斥,整型变量readcount:表示正在读的进程数目;
  • 由于只要有一个reader进程在读,便不允许writer进程写。所以,仅当readcount=0,即无reader进程在读时,reader才需要执行wait操作。若wait(wmutex)操作成功,reader进程便可去读,相应地,做readcount+1操作。
  • 同理,仅当reader进程在执行了readcount减1操作后其值为0时,才需执行signal(wmutex)操作,以便让write进程写。
    互斥信号量rmutex:reader进程间互斥访问readcount。

对于reader进程:

  • 1、先申请readcount资源,即执行wait(rmutex)
  • 2、如果readcount=0,则需要再申请wmutex,即执行wait(wmutex),然后执行readcount+1,接着释放readcount资源,即执行signal(rmutex)。
  • 3、如果readcount!=0,则直接执行readcount+1,然后释放readcount资源,即执行signal(rmutex)。
  • 4、执行读操作
  • 5、申请readcount资源,执行readcount-1
  • 6、如果readcount=0,那么释放wmutex,即执行signal(wmutex),否则直接释放rmutex,即执行signal(rmutex)。
    写进程就是正常的申请wmutex资源,然后执行写操作,释放wmutex,即执行signal(wmutex)。

2、利用信号量集机制解决读者-写者问题

对于reader进程和writer进程:

  • 每来一个读进程,会是L-1,最多可以使RN个读进程来申请资源
  • swait(mx,1,0)语句起着开关的作用。只要无writer进程进入写,mx=1,reader进程就都可以进入读。但只要一旦有writer进程进入写时,mx=0,则任何reader进程就都无法进入读。
  • swait(mx, 1, 1; L, RN, 0)语句表示仅当既无writer进程在写(mx=1),又无reader进程在读(L=RN),writer进程才能进入临界区写。

经典的进程同步问题详解相关推荐

  1. 如何将3dmax软件的界面设置成经典模式?-图文详解

    据3dmax软件的版本不同界面也会有所改变,很多朋友还是习惯于经典模式.那你知道如何将3dmax软件的界面设置成经典模式吗?本文小编将和大家分享将3dmax软件的界面设置成经典模式的方法与步骤,感兴趣 ...

  2. 机器学习经典算法决策树原理详解(简单易懂)

    ↑ 点击上方[计算机视觉联盟]关注我们 最经典的决策树算法有ID3.C4.5.CART,其中ID3算法是最早被提出的,它可以处理离散属性样本的分类,C4.5和CART算法则可以处理更加复杂的分类问题, ...

  3. openerp经典收藏 对象定义详解(转载)

    对象定义详解 原文地址: http://shine-it.net/index.php/topic,2159.0.html http://blog.sina.com.cn/s/blog_57ded94e ...

  4. [转]很经典的http协议详解

    引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1. ...

  5. 最经典的HashMap图文详解,干货满满!

    前言 我们说 Kafka 是一个消息队列,其实更加确切的说:是 Broker 这个核心部件.为何这么说?你会发现我们可以通过控制台. Java 代码. C++ 代码.甚至是 Socket 向 Brok ...

  6. 《Vue入门到精通》最强Vue教程,附带经典案例,万字详解,干货十足!

    目录: 一.前言 二.Vue是什么? 1.简介 2.发展史 3.为什么要学习Vue? 4.jQuery.javascript.Vue的区别 5.Vue框架构造 三.Vue的使用 1.Vue环境搭建 2 ...

  7. 目标检测经典算法和API详解(笔记)

    文章目录 商品目标检测 1. 目标检测概述 1.1.项目演示介绍 学习目标 1.1.1 项目演示 1.1.2 项目结构 1.1.3 项目安排 1.2 图像识别背景 学习目标 1.2.1 图像识别三大任 ...

  8. c语言经典例题及其答案详解,100个经典c语言例题(带答案)

    100个经典c语言例题(带答案) 100 个经典 c 语言例题(带答案)经典C源程序 100 例- -1 经典C源程序 100 例 [程序 1]题目:有 1.2.3.4 个数字,能组成多少个互不相同且 ...

  9. 经典SY阀型号详解(未完待续)

    举个例子:比如SY3220-5G SY系列(经典) 第一重点参数: 不同编号代表不同流量:SY3220-5G   流量(3,5,7,9代表阀的大小,越大的阀通流量越大,可以通过样本中阀的C值和b值,通 ...

最新文章

  1. VMware ESXi客户端连接控制台时提示“VMRC控制台连接已断开...正在尝试重新连接“的解决方法
  2. 计算机老师用英语应聘,应聘计算机教师个人自荐书(精选6篇)
  3. c 创建mysql实体模型_EntityFrameworkCore 根据实体类自动创建数据库
  4. hdu5249KPI动态中位数(两个set)
  5. oracle slient静默安装并配置数据库及仅安装数据库不配置数据库shell
  6. 自动拷贝文件至服务器,自动拷贝远程服务器文件
  7. java分享知识点_Java基础知识点整理(一)
  8. 从零搭建自己的SpringBoot后台框架(六)
  9. python撤销_python 取消转义字符作用
  10. 使用Arduino Pro Mini和BC95-B5连接物联网
  11. NO.3 创建一个图片,并在图片上画线插入文字等
  12. pdf电子书转换成txt文档
  13. 解决Git报错:error: You have not concluded your merge (MERGE_HEAD exists)
  14. ios 按钮文字下划线_iOS实现一段文字中部分有下划线,并且可以点击
  15. 智力题------扔硬币吃苹果
  16. 关于android双卡手机sim卡信息采集适配的心得
  17. 新手要学会做网站要多长时间?
  18. 国家4A级旅游风景区安化云台山欢迎您的到来
  19. 科技H5 | 打破常规H5,QQ-AR开创交互玩法新纪元
  20. Java实现FTP上传文件

热门文章

  1. certutil工具的用法
  2. Android Framework 学习
  3. 网络编程_HTTP协议_Web服务器_(TCP3次握手4次挥手,长短连接,伪静态、静态和动态)
  4. SOT23-6 大功率升压IC 5V/1A典型应用
  5. JavaScript前端页面三大家族
  6. Layui数据表格解析任意数据格式问题
  7. 医美健康行业 美丽田园IPO在港交所上涨60%
  8. linux修改语言环境为中文
  9. BP,RBF,GRNN和PNN神经网络
  10. 笔记|(b站)刘二大人:pytorch深度学习实践(代码详细笔记,适合零基础)