coursera 《现代操作系统》 -- 第五周 同步机制(2)

分清紧急等待队列与条件等待队列(c 链)
条件等待队列:但是进入管程的这个进程可能由于对资源的操作的过程中发现条件不成熟, 那么它就不能够继续对资源进行相应的操作。 我们以生产者、 消费者为例。 如果生产者想要调用一个 insert 的过程,去把数据放到缓冲区里头,如果缓冲区满了,那这个 放到缓冲区动作是不能完成的,因此呢这个进程,生产者进程就应该等。 等,等在哪里?我们为等待不同条件的这样一个进程设置了条件变量,也就是说如果等,等在某个条件变量上。 通过什么样的操作呢?那我们刚说通过了 wait 操作。
紧急等待队列:当一个进程调用 wait 操作,那么会等在某个条件变量上。 刚才我们已经介绍过,当一个进程等在 条件变量上的时候,它应该把管程的互斥权放开,也就是把这个门打开。 让管程外的想进入管程的进程进入 我们刚才又介绍了说,如果后面进来的进程 它调用了这些过程去对资源进行 相应的操作,在操作过程中呢,发现条件成熟了,所以呢它调用了 signal 这样一个 函数,然后呢去唤醒某个等在条件变量上的一个进程。如果唤醒的是刚才等待的这个进程, 那么在管程里头,同时就有两个进程存在了。 那么两个进程存在,我们刚才说的,那么按照HOARE 管程的语义, 后面一个进程唤醒了前面一个进程, 那么前面这个进程执行,而唤醒其他进程的这个进程它呢等待。 那等在什么地方呢?那么就 专门为它设置了一个队列,在管程内设置了一个队列。 叫做紧急等待队列。
入口等待队列
管程是互斥进入的, 如果一个进程已经调用了管程当中的某一个过程去做相应的操作, 那么后续的进程就不能再进入管程了 我们这里头用一个比较形象,一个门,就是如果一个进程已经进到管程里头来, 做相应的操作,那么其他还想进管程的,调用管程过程的这些进程就只能在管程外面等。 所以我们呢很形象地在门口画了一个队列。 我们叫做入口等待队列
MESA 管程
相比于 HOARE 管程,减少了进程切换,增加了至少一次的条件检查。由于增加了条件检查,所以出错率更小。
增加了超时设定,防止notify的进程出错,而一直处于饥饿状态,收不到信号,减小了出错率。
notify
通知条件队列上的第一个,进入等待态
broadcast
通知所有条件队列上的,进入等待态

coursera 《现代操作系统》 -- 第五周 同步机制(2)的更多相关文章
- coursera 《现代操作系统》 -- 第五周 同步机制(1)
临界区块(Critical section)指的是一个访问共用资源(例如:共用设备或是共用存储器)的程序片段,而这些共用资源有无法同时被多个线程访问的特性.(不是字面意思的一个区域,是程序片段的集合) ...
- Linux kernel 同步机制
Linux kernel同步机制(上篇) https://mp.weixin.qq.com/s/mosYi_W-Rp1-HgdtxUqSEgLinux kernel 同步机制(下篇) https:// ...
- Linux内核同步机制之(五):Read Write spin lock【转】
一.为何会有rw spin lock? 在有了强大的spin lock之后,为何还会有rw spin lock呢?无他,仅仅是为了增加内核的并发,从而增加性能而已.spin lock严格的限制只有一个 ...
- 2017-2018-1 20179205《Linux内核原理与设计》第五周作业
<Linux内核原理与设计>第五周作业 视频学习及操作分析 一.用户态.内核态和中断 内核态在CPU执行中对应高执行级别,执行级别为0级,具有特权指令,可以访问任意物理地址:用户态执行级别 ...
- 锁相关知识 & mutex怎么实现的 & spinlock怎么用的 & 怎样避免死锁 & 内核同步机制 & 读写锁
spinlock在上一篇文章有提到:http://www.cnblogs.com/charlesblc/p/6254437.html 通过锁数据总线来实现. 而看了这篇文章说明:mutex内部也用到 ...
- 分析.Net里线程同步机制
我 们知道并行编程模型两种:一种是基于消息式的,第二种是基于共享内存式的. 前段时间项目中遇到了第二种 使用多线程开发并行程序共享资源的问题 ,今天以实际案例出发对.net里的共享内存式的线程同步机制 ...
- Linux内核同步机制
http://blog.csdn.net/bullbat/article/details/7376424 Linux内核同步控制方法有很多,信号量.锁.原子量.RCU等等,不同的实现方法应用于不同的环 ...
- Linux内核的同步机制
本文详细的介绍了Linux内核中的同步机制:原子操作.信号量.读写信号量和自旋锁的API,使用要求以及一些典型示例 一.引言 在现代操作系统里,同一时间可能有多个内核执行流在执行,因此内核其实象多进程 ...
- 201771010134杨其菊《面向对象程序设计(java)》第十五周学习
第十五周学习总结 第一部分:理论知识 JAR文件: 应用程序首选项存储: Java Web Start JAR文件: 1.Java程序的打包:程序编译完成后,程序员将.class文件压缩打包为.jar ...
随机推荐
- POJ 3221 Diamond Puzzle(BFS)
Description A diamond puzzle is played on a tessellated hexagon like the one shown in Figure 1 below ...
- nnlog-yaml
from nnlog import Logger# log=Logger(file_name='my.log',level='debug',# when='S',backCount=5,interva ...
- 【转】SQL SERVER获取索引脚本
关于如何获取索引脚本的语句很多,上次在项目中需要去查询并获取索引脚本,所以写了一个简单的查询语句来进行获取. WITH idxcol AS ( SELECT ...
- vue 销毁组件
销毁组件 // get~ 销毁组件 destroyElement() { this.$destroy(true); this.$el.parentNode.removeChild(this.$el); ...
- 简体字丶冯|服务网关kong-docker安装
tags: kong ,服务网关,docker安装教程 grammar_cjkRuby: true --- 作为一名技术探索者,想了解一个未知系统的最有效方法就是去用.然而搭建一个陌生系统的最快捷方法 ...
- ubuntu 12.04上安装emacs24
1.如果安装了emacs23的先删掉 sudo apt-get purge emacs23 2.默认的软件源中没有emacs24,需要添加新源 sudo add-apt-repository ppa: ...
- ModelSim高级使用进阶_1_do文件和批处理文件使用_Camp
https://wenku.baidu.com/view/50fb251914791711cc7917fd.html https://wenku.baidu.com/view/73187dcefe47 ...
- 没有博士学位,照样玩转TensorFlow深度学习
教程 | 没有博士学位,照样玩转TensorFlow深度学习 机器之心2017-01-24 12:32:22 程序设计 谷歌 操作系统 阅读(362)评论(0) 选自Codelabs 机器之心编译 参 ...
- html5_websocket_tomcat8
目录 前言 后端 浏览器前端 java的client 注意 前言 HTML5 WebSocket实现了服务器与浏览器的双向通讯,开销小,实时性高,常用于即时通讯和对信息实时性要求比较高的应用. 下面讲 ...
- JAVA热部署原理
1.热部署是什么? 对于Java应用程序来说,热部署就是在运行时更新Java类文件. 2.热部署有什么用? 可以不重启应用的情况下,更新应用.举个例子,就像电脑可以在不重启的情况下,更换U盘. OSG ...