分清紧急等待队列与条件等待队列(c 链)

条件等待队列:但是进入管程的这个进程可能由于对资源的操作的过程中发现条件不成熟, 那么它就不能够继续对资源进行相应的操作。 我们以生产者、 消费者为例。 如果生产者想要调用一个 insert 的过程,去把数据放到缓冲区里头,如果缓冲区满了,那这个 放到缓冲区动作是不能完成的,因此呢这个进程,生产者进程就应该等。 等,等在哪里?我们为等待不同条件的这样一个进程设置了条件变量,也就是说如果等,等在某个条件变量上。 通过什么样的操作呢?那我们刚说通过了 wait 操作。

紧急等待队列:当一个进程调用 wait 操作,那么会等在某个条件变量上。 刚才我们已经介绍过,当一个进程等在 条件变量上的时候,它应该把管程的互斥权放开,也就是把这个门打开。 让管程外的想进入管程的进程进入 我们刚才又介绍了说,如果后面进来的进程 它调用了这些过程去对资源进行 相应的操作,在操作过程中呢,发现条件成熟了,所以呢它调用了 signal 这样一个 函数,然后呢去唤醒某个等在条件变量上的一个进程。如果唤醒的是刚才等待的这个进程, 那么在管程里头,同时就有两个进程存在了。 那么两个进程存在,我们刚才说的,那么按照HOARE 管程的语义, 后面一个进程唤醒了前面一个进程, 那么前面这个进程执行,而唤醒其他进程的这个进程它呢等待。 那等在什么地方呢?那么就 专门为它设置了一个队列,在管程内设置了一个队列。 叫做紧急等待队列。

入口等待队列

管程是互斥进入的, 如果一个进程已经调用了管程当中的某一个过程去做相应的操作, 那么后续的进程就不能再进入管程了 我们这里头用一个比较形象,一个门,就是如果一个进程已经进到管程里头来, 做相应的操作,那么其他还想进管程的,调用管程过程的这些进程就只能在管程外面等。 所以我们呢很形象地在门口画了一个队列。 我们叫做入口等待队列

 

MESA 管程

相比于 HOARE 管程,减少了进程切换,增加了至少一次的条件检查。由于增加了条件检查,所以出错率更小。

增加了超时设定,防止notify的进程出错,而一直处于饥饿状态,收不到信号,减小了出错率。

notify

通知条件队列上的第一个,进入等待态

broadcast

通知所有条件队列上的,进入等待态

coursera 《现代操作系统》 -- 第五周 同步机制(2)的更多相关文章

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

    临界区块(Critical section)指的是一个访问共用资源(例如:共用设备或是共用存储器)的程序片段,而这些共用资源有无法同时被多个线程访问的特性.(不是字面意思的一个区域,是程序片段的集合) ...

  2. Linux kernel 同步机制

    Linux kernel同步机制(上篇) https://mp.weixin.qq.com/s/mosYi_W-Rp1-HgdtxUqSEgLinux kernel 同步机制(下篇) https:// ...

  3. Linux内核同步机制之(五):Read Write spin lock【转】

    一.为何会有rw spin lock? 在有了强大的spin lock之后,为何还会有rw spin lock呢?无他,仅仅是为了增加内核的并发,从而增加性能而已.spin lock严格的限制只有一个 ...

  4. 2017-2018-1 20179205《Linux内核原理与设计》第五周作业

    <Linux内核原理与设计>第五周作业 视频学习及操作分析 一.用户态.内核态和中断 内核态在CPU执行中对应高执行级别,执行级别为0级,具有特权指令,可以访问任意物理地址:用户态执行级别 ...

  5. 锁相关知识 & mutex怎么实现的 & spinlock怎么用的 & 怎样避免死锁 & 内核同步机制 & 读写锁

    spinlock在上一篇文章有提到:http://www.cnblogs.com/charlesblc/p/6254437.html  通过锁数据总线来实现. 而看了这篇文章说明:mutex内部也用到 ...

  6. 分析.Net里线程同步机制

    我 们知道并行编程模型两种:一种是基于消息式的,第二种是基于共享内存式的. 前段时间项目中遇到了第二种 使用多线程开发并行程序共享资源的问题 ,今天以实际案例出发对.net里的共享内存式的线程同步机制 ...

  7. Linux内核同步机制

    http://blog.csdn.net/bullbat/article/details/7376424 Linux内核同步控制方法有很多,信号量.锁.原子量.RCU等等,不同的实现方法应用于不同的环 ...

  8. Linux内核的同步机制

    本文详细的介绍了Linux内核中的同步机制:原子操作.信号量.读写信号量和自旋锁的API,使用要求以及一些典型示例 一.引言 在现代操作系统里,同一时间可能有多个内核执行流在执行,因此内核其实象多进程 ...

  9. 201771010134杨其菊《面向对象程序设计(java)》第十五周学习

    第十五周学习总结 第一部分:理论知识 JAR文件: 应用程序首选项存储: Java Web Start JAR文件: 1.Java程序的打包:程序编译完成后,程序员将.class文件压缩打包为.jar ...

随机推荐

  1. Photoshop - 描边

    描边在后期的UI制作的时候会比较少用,因为有一些缺陷,可以用选取收缩 1.快捷键E + S  (菜单栏-编辑-描边.photoshop cc) 2.使用图层样式进行描边(双击图层列表区域,图层缩略图的 ...

  2. jQuery控制form表单元素聚焦

      CreateTime--2017年5月28日08:57:16Author:Marydon jQuery使form表单的第一个文本框聚焦 /** * 使form表单的第一个文本框聚焦 */ func ...

  3. 【Java】Java_15 打印九九乘法表

    使用For循环嵌套即可打印九九乘法表 以下是具体代码: /** * 打印九九乘法表 */ package com.oliver.test; public class TestMultiplicatio ...

  4. 破解 zip 压缩包程序

    目录 项目文件结构 代码实现过程 演示效果 代码地址如下:http://www.demodashi.com/demo/12021.html 项目文件结构 在当前目录有三个文件: 3-zipCrack. ...

  5. java类反射

    http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html

  6. MySQL性能监控工具-Spotlight on MySQL

    原文地址:http://blog.csdn.net/k_scott/article/details/8167018 这是我的第二款用于监控MySQL数据库性能的工具:Spotlight on MySQ ...

  7. 神技do{}while(false)

    神技do{}while(false) do{}while(false)或者说do{}while(0),本人在linux源码中学得,起初看起来比较奇怪,但在处理连续流程中特别有用,例如ABC三个流程,A ...

  8. filebeat 选项

    Filebeat Options input_type: log|stdin 指定输入类型 paths 支持基本的正则,所有golang glob都支持,支持/var/log/*/*.log enco ...

  9. LwIP协议栈(2):网络接口

    在LwIP中,物理网络硬件接口结构保存在一个全局链表中,它们通过结构体中的 next 指针连接. struct netif { /// pointer to next in linked list * ...

  10. 辛星跟您玩转vim第二节之用vim命令移动光标

    首先值得一提的是,我的vim教程pdf版本号已经写完了,大家能够去下载.这里是csdn的下载地址:csdn下载.假设左边的下载地址挂掉了,也能够自行在浏览器以下输入例如以下地址进行下载:http:// ...