目录

1. 利用信号量实现进程的同步和互斥

利用信号量实现进程互斥

利用信号量实现进程同步

2. 生产者消费者问题

3. 哲学家就餐问题

4. 读者写者问题

读者优先

写者优先

读者写者问题的变形

使用信号量解决读者写者问题

5. 经典同步问题例题

6. 管程机制

使用管程解决生产者消费者问题

管程与进程的区别

7. 进程通信

共享存储器

消息传递系统

管道通信

易错知识点




1. 利用信号量实现进程的同步和互斥

利用信号量实现进程互斥

为使多个进程能互斥地访问某临界资源,只须为该资 源设置一个互斥信号量 mutex,并设其初始值为 1,然后将各进程访问该资源的临界区 CS 置于 wait(mutex) 和 signal(mutex) 操作之间即可。 在进程互斥中使用 P、V 操作,须在同一程序段成对出 现同一信号量的 P、V 操作,否则会造成系统瘫痪。

注意:

  实现互斥的信号量的PV操作必须在同一程序当中成对的出现

利用信号量实现进程同步

与此同时,可以利用信号量来描述前趋图

wait和signal操作必须成对出现

同步的wait操作在互斥的wait操作前

2. 生产者消费者问题

生产者—消费者”问题 (producer/consumer problem) 是最著名的进程同步问题。 它描述了一组生产者向一组消费者提供产品,它们共享 一个有界缓冲池,生产者向其中投放产品,消费者从中 取得产品。 它是许多相互合作进程的抽象,如输入进程与计算进 程;计算进程与打印进程等。

  设置两个资源信号量和一个互斥信号量

注意:

empty是空缓冲区的数目,其初值是有界缓冲池的大小n

full满缓冲区的数目,其初值是1

互斥信号量的初值是1

注意:

  两个P操作的顺序不当会导致死锁的出现

3. 哲学家就餐问题

此算法可以保证不会有相邻的两位哲学家同时进餐。 若五位哲学家同时饥饿而各自拿起了左边的筷子,这使 五个信号量 chopstick 均为 0,当他们试图去拿起右边 的筷子时,都将因无筷子而无限期地等待下去,即可能 会引起死锁。

4. 读者写者问题

读者优先

  需要设置一个共享变量,两个互斥信号量

需要注意的是,对于共享变量Readcount的访问也是互斥的。

  第一位读者阻止写者

  最后一位读者允许写者

写者优先

注意:

写者优先增加了一个读写互斥信号量S

读者写者问题的变形

使用信号量解决读者写者问题

5. 经典同步问题例题

例题1:

例题2:

例题3:

例题4:

注意本题当中对S的PV操作,应该放在不同程序段,因为笼子里一次只可以放一个,必须消费者V操作以后,生产者才可以继续放。

例题5:

例题6:

6. 管程机制

基本思想: 把访问某种临界资源的所有进程的同步操作 都集中起来,构成一个所谓的“秘书”进程(管程), 凡是访问临界资源的进程,都需要报告“秘书”,由秘 书来实现诸进程的同步。

管程的定义: 一个数据结构和在该数据结构上能被并发进程所执行的一组操作,这组操作能使进程同步和改变 管程中的数据。

管程的组成:①管程的名称;②局部于管程内部的共享 数据结构说明;③ 对该数据结构进行操作的一组过程; ④ 对局部于管程内部的共享数据设置初始值的语句。

管程中的共享变量在管程外部是不可见的,不能被任何 外部过程访问。管程相当于围墙,把共享变量和对它进 行操作的若干过程围了起来。 外部只能通过调用管程中所说明的外部过程(函数)来 间接地访问管程中的共享变量。 一个进程通过调用管程内的一个过程而进入管程。 管程通常是用来管理资源的,因而在管程中设有进程等 待队列以及相应的等待及唤醒操作。 管程每次只允许一个进程执行,从而实现了进程的互斥

使用管程解决生产者消费者问题

注意:此处的full 和 empty均为条件变量

管程与进程的区别

注意

管程定义是公共数据结构

7. 进程通信

共享存储器

消息传递系统

管道通信

易错知识点

1. 临界区是指进程当中用于访问临界资源的那段代码

2.  信号量机制是一种有效实现进程同步和互斥的机制;进程的并发执行不需要信号量。

3. 进程进入临界区必须满足互斥条件,进程进入临界区但没有离开就进入阻塞是可以的;

例如:

一个正在访问临界资源的的进程由于申请等待I/O操作而中断,它允许其他进程抢占处理器,但是它不允许其他进程进入它的临界区。

4. PV操作是一种低级进程通信原语;PV操作由一种不可中断的过程组成

5. 原语是不可分割的指令序列

6. 管程外过程调用管程内数据结构的说明不是管程的组成部分

7. 管程当中的signa操作与信号量机制当中的V操作不同,信号量机制当中的V操作一定会改变信号量的值S=S+1,但是管程当中的signal是针对某个条件变量的,若不存在因为该条件而阻塞的进程,则 signal不会产生任何影响

8. 信箱通信是一种间接通信

9. 管程不仅可以实现进程间的互斥,还可以实现进程间的同步;管程是由编程语言支持的进程同步机制;在任何时候,只可以由一个进程在管程当中;管程当中定义的变量只可以被管程内的过程访问

10. 若X是管程当中的条件变量,则当进程执行x.wait()时所做的工作是阻塞该进程,并将其插入x的阻塞队列。

11. 信号量机制可以实现让权等待

详解经典进程同步问题(生产者消费者问题/哲学家进餐问题/读者写者问题)_OS相关推荐

  1. 经典进程同步问题——生产者消费者问题

    问题描述 "生产者-消费者"问题 (producer/consumer problem) 是最著名的进程同步问题. 该问题描述了共享固定大小缓冲区的两个线程--即所谓的" ...

  2. python编程if语法-Python编程入门基础语法详解经典

    原标题:Python编程入门基础语法详解经典 一.基本概念 1.内置的变量类型: Python是有变量类型的,而且会强制检查变量类型.内置的变量类型有如下几种: #浮点 float_number = ...

  3. rocketmq 消息指定_详解RocketMQ不同类型的消费者

    原标题:详解RocketMQ不同类型的消费者 云栖君导读:本文节选自云栖社区系列丛书<RocketMQ原理与实战解析>,作者:阿里巴巴数据专家杨开元.本节将重点讲解RocketMQ不同类型 ...

  4. 线程通信的经典问题:生产者消费者问题

    package ThreadTest2; // 线程通信的经典问题:生产者消费者//店员(资源) class Clerk{private int productCount = 0 ;public sy ...

  5. HTTP协议详解+经典面试题

    ✨HTTP协议详解+经典面试题 作者介绍:

  6. 进程同步问题——生产者—消费者问题

    进程同步问题--生产者-消费者问题 问题梗概 生产者-消费者问题是相互合作关系的进程关系的一种抽象,是一个广义的概念,可以代表一类具有相同属性的进程 生产者:一个或者是多个生产者将生产的数据存入缓冲区 ...

  7. Java 多线程详解(四)------生产者和消费者

    Java 多线程详解(一)------概念的引入:https://blog.csdn.net/weixin_39816740/article/details/80089790 Java 多线程详解(二 ...

  8. 2.3.6 操作系统之进程同步与互斥经典问题(生产者-消费者问题、多生产者-多消费者问题、吸烟者问题、读者-写者问题、哲学家进餐问题)

    文章目录 0.前言 1.生产者-消费者问题 (1)问题描述 (2)问题分析 (3)如何实现? (4)实现互斥的P操作一定要在实现同步的P操作之后 (5)知识回顾与重要考点 2.多生产者-多消费者问题 ...

  9. Linux 系统应用编程——多线程经典问题(生产者-消费者)

    "生产者--消费者"问题是Linux多线程编程中的经典问题,主要是利用信号量处理线程间的同步和互斥问题. "生产者--消费者"问题描述如下: 有一个有限缓冲区( ...

  10. 进程同步之生产者消费者模型

    一.概念引入 例如寄信 我(生产者) 邮递员(消费者) 我把信件写好 -----相当于生产者生产数据 我把信放到邮筒-----相当于把生产者的数据放入到缓冲区 邮递员把信从邮筒取出-----相当于消费 ...

最新文章

  1. 软件测试沟通技巧,你到底应该如何沟通:沟通的技巧
  2. 用python读取、处理、另存为csv文件
  3. 应用css div进行页面布局设计,利用CSS与DIV进行页面布局.ppt
  4. 央视315曝光SDK事件,应用开发者如何避坑?
  5. ES6 let 和 const 关键字
  6. 双十一最具性价比机型,Redmi K30S至尊纪念版上手体验
  7. ArcMap增加图标
  8. 游戏筑基开发之函数指针及main函数利用指针传参(C语言)
  9. 举例说明jquery插件的编写方法
  10. QQ配置文件解密(转)
  11. CxImage功能强大的图形处理程序
  12. mathcad prime server system(PASS云计算书系统)开发
  13. word外部表不是预期的格式_word使用邮件合并提示外部表不是预期的格式怎么解决...
  14. Redis 客户端之Lettuce配置使用(基于Spring Boot 2.x)
  15. 为什么选择香港虚拟主机?
  16. userdel: user xxx is currently used by process xxx 解决方案
  17. JAVA课程设计——彩票抽奖购买系统
  18. Fiddler抓包工具是最强大最好用的 Web 调试工具之一
  19. 微信小程序中使用iconfont(阿里矢量图标字体)
  20. 插件化中Activity的加载

热门文章

  1. ubuntu安装谷歌浏览器后仍然显示无法连接网络解决办法
  2. vbm 分析_MRI脑影像分析从哲学到技术:一文搞懂VBM预处理基本原理(全网最详细解析)...
  3. 计算机主机的组成部分,计算机主机的组成是有哪些
  4. EndNote毕业论文参考文献格式输出
  5. OOP思想--封装和继承
  6. linux基础篇读书笔记
  7. Google Earth Engine(GEE)——将原始影像进行升尺度计算(以海南省为例)
  8. 3DES加密解密方法
  9. 2019论文选题热点计算机,关于进行2019届毕业论文选题工作的通知
  10. 我该如何带好你—我的团队