讨论区讨论详情

【笔记展览馆】《操作系统》十八章 信号量与管程
2015-05-20 17:53:04

18.1 信号量

信号量: 是操作系统提供的一种协调共享资源访问的方法

由Dijkstra 提出

信号量的特性(semaphore)

    信号量是被保护的整形变量

    P()可能阻塞, V()不会阻塞

    通常假定信号量是“公平的”


信号量的实现

信号量的实现.png


18.2 信号量的使用

信号量的分类

    可分为两种信号量

        二进制信号量:资源数码为0或1

        资源信号量:资源数目为任何非负值


用信号量实现临界区的互斥访问

    每类资源设置一个信号量, 其初值为1

    必须成对使用P()操作和V()

    用信号量实现临界区的互斥访问.png


用信号量实现条件同步

    条件同步设置一个信号量, 其初值为0

    用信号量实现同步.png


生产者-消费者问题

问题分析

    任何时刻只能有一个线程操作缓冲区 (互斥访问)

    缓冲区空时,消费者必须等待生产者 (条件同步),

    缓冲区满时,生产者必须等待消费者 (条件同步)

    

用信号量描述每个约束

    二进制信号量mutex

    资源信号量fullBuffers

    资源信号量emptyBuffers


用信号量解决生产者-消费者问题




使用信号量的困难

读/开发代码比较困难

容易出错

不能避免死锁


缓冲区??


18.3 管程

管程是一种用于多线程互斥访问共享资源的程序结构

    采用面向对象方法, 简化了线程间的同步控制

    任一时刻最多只有一个线程执行管程代码

    正在管程中的线程可临时放弃管程的互斥访问, 等待事件出现时恢复

管程的使用

    在对象/模块中,收集相关共享数据

    定义访问共享数据的方法


管程的组成

一个锁:控制管程代码的互斥访问

0或多个条件变量: 管理共享数据的并发访问

管程的组成.png


条件变量

    条件变量是管程内的等待机制

    Wait()操作

    Signal() 操作


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


管程条件变量的释放处理方式

Hansen管程:高效,在实际中运用

Hoare管程   :低效,确定, 在教科书中用


18.4 哲学家就餐问题

18.5 读者-写者问题



        



回复:

还没有人发言哦,来抢沙发吧~

请先登录

说点什么吧~

学堂公告

各位MOOCer大家好 (^-^)V

欢迎来到学堂在线广场~

在这里你可以玩活动,看资讯,晒笔记。

还可以交学友、发心情、聊人生。

在学堂的每一天,就从这里开始吧!

点击 广场指南 了解更多

推荐活动

我要举报
提交