说点什么吧~
18.1 信号量
信号量: 是操作系统提供的一种协调共享资源访问的方法
由Dijkstra 提出
信号量的特性(semaphore)
信号量是被保护的整形变量
P()可能阻塞, V()不会阻塞
通常假定信号量是“公平的”
信号量的实现
18.2 信号量的使用
信号量的分类
可分为两种信号量
二进制信号量:资源数码为0或1
资源信号量:资源数目为任何非负值
用信号量实现临界区的互斥访问
每类资源设置一个信号量, 其初值为1
必须成对使用P()操作和V()
用信号量实现条件同步
条件同步设置一个信号量, 其初值为0
生产者-消费者问题
问题分析
任何时刻只能有一个线程操作缓冲区 (互斥访问)
缓冲区空时,消费者必须等待生产者 (条件同步),
缓冲区满时,生产者必须等待消费者 (条件同步)
用信号量描述每个约束
二进制信号量mutex
资源信号量fullBuffers
资源信号量emptyBuffers
用信号量解决生产者-消费者问题
使用信号量的困难
读/开发代码比较困难
容易出错
不能避免死锁
缓冲区??
18.3 管程
管程是一种用于多线程互斥访问共享资源的程序结构
采用面向对象方法, 简化了线程间的同步控制
任一时刻最多只有一个线程执行管程代码
正在管程中的线程可临时放弃管程的互斥访问, 等待事件出现时恢复
管程的使用
在对象/模块中,收集相关共享数据
定义访问共享数据的方法
管程的组成
一个锁:控制管程代码的互斥访问
0或多个条件变量: 管理共享数据的并发访问
条件变量
条件变量是管程内的等待机制
Wait()操作
Signal() 操作
用管程解决生产者-消费者问题
管程条件变量的释放处理方式
Hansen管程:高效,在实际中运用
Hoare管程 :低效,确定, 在教科书中用
18.4 哲学家就餐问题
18.5 读者-写者问题
说点什么吧~
欢迎来到学堂在线广场~
在这里你可以玩活动,看资讯,晒笔记。
还可以交学友、发心情、聊人生。
在学堂的每一天,就从这里开始吧!
点击 广场指南 了解更多