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 ...
随机推荐
- js中数组的splice()方法
在数组中splice方法有增.删.该的多功能用处. var list = []; list.push(1); list.push(2); list.push(3); console.log(list) ...
- Jenkins部署java项目实例
源码管理 选择 “git”, Repository URL填写你的git地址,并配置对应的key,大家最好事前先在jenkins这台机器上能够直接远程git操作私有仓库 构建触发器.构建环境.Pre ...
- 8、Linux设备驱动的并发控制
一.并发与竞争 并发是指多个 多个执行单元同时执行,而这对对共享的资源,比如硬件的资源.软件的全局变量.静态变量 的访问,很容易导致竞态, 1.1.中断屏蔽 在单核的 CPU 里,避 ...
- CSDN开源夏令营 百度数据可视化实践 ECharts(4)
ECharts知识点总结: 在应用过程中总会遇到一些难以理解的概念和属性,这里就总结了一下比較难的知识点,方便理解概念.进而更好的掌握ECharts. (1)1. 一个完整的option包括什么?能 ...
- find命令下排除部分目录修改权限
#!/bin/bash # 项目文件夹.文件权限修改 # 批量修改文件夹或者文件的权限时,需要先忽略掉可写文件夹('./bootstrap/cache'.'./public/attachments'. ...
- nginx中ngx_list的数据结构
今天没事了,在查看nginx源代码中看到ngx_list的结构,发现设计为链表数组的形式,不知道为什么这样设计 struct ngx_list_part_s { void *elts;//指向数组的起 ...
- Nginx HttpSubModule sub_filter模块的过滤功能
Nginx HttpSubModule sub_filter模块的过滤功能 发表于2年前(2013-08-05 10:39) 阅读(1481) | 评论(0) 0人收藏此文章, 我要收藏 赞0 5 ...
- 解决 ios7.0 以后自定义导航栏左边按钮靠右的问题
解决 ios7.0 以后自定义导航栏左边按钮靠右的问题 www.111cn.net 编辑:edit02_lz 来源:转载 最近开发了一个ios的app,在ios7.0+出现自定义导航栏左边按钮出现靠右 ...
- FreeBSD Try to set MAKE_JOBS_UNSAFE=yes and rebuild before
FreeBSD Try to set MAKE_JOBS_UNSAFE=yes and rebuild before,玛德,FreeBSD安装软件就是蛋疼~ mark In some ports th ...
- MapReduce源码分析之JobSubmitter(一)
JobSubmitter,顾名思义,它是MapReduce中作业提交者,而实际上JobSubmitter除了构造方法外,对外提供的唯一一个非private成员变量或方法就是submitJobInter ...