信号量与管程
来源:互联网 发布:java continue label 编辑:程序博客网 时间:2024/06/18 14:06
基本同步方法
信号量semaphore:操作系统提供的一种协调共享资源访问的方法:OS是管理者,地位高于进程;信号量表示系统资源的数目。是一种抽象的数据类型:一个整形变量sem和两个原子操作(p(),申请,sem减1,如sem<0,进入等待,否则继续;v(),释放,sem加1,如sem<=0,唤醒另一等待进程)。
信号量是被保护的整数变量,初始化只能有p(),v()完成,由操作系统完成保证pv原子性。P()可能阻塞,v()不会阻塞。
信号量分类:二进制信号量、资源信号量
信号量使用:互斥访问(临界区)、条件同步(线程间)。
(1)互斥访问。信号量为1,p(),v()成对使用,用p保证互斥,用v操作保证释放临界资源。
(2)条件同步:信号量初值为0,
生产者-消费者问题:
问题分析:
任何时刻只能有一个线程操作缓冲区(互斥访问);
缓冲区空时,消费者必须等待生产者(条件同步);
缓冲区满时,生产者必须等待消费者(条件同步)
信号量描述:二进制信号量mutex,资源信号量fullBuffers,资源信号量emptyBuffers
用信号量解决生产者-消费者问题
管程:
管程Moniter:是一种用于多线程互斥访问共享资源的程序结构,采用面相对象的方法;任一时刻最多只有一个线程执行管程代码;正在管程中的线程可临时放弃管程的互斥代码,等待事件出现时恢复。在对象/模块中,收集相关共享数据,定义访问共享数据的方法。
管程组成:一个锁、0个或多个条件变量Condition Variable(是管程内的等待机制,每个条件变量表示一种等待原因,对应一个等待队列)。
Wait():将自己阻塞在等待队列中,唤醒一个等待者或释放管程的互斥访问。
Signal():将等待队列中的一个线程唤醒。条件变量的初值是0,
用管程解决生产者-消费者问题:
管程条件变量的释放处理方式:
Hansen管程当前的优先级更高T2,主要用于真实OS,Java;Horare管程等待条件变量的优先级更高T1,用于教科书中。
(1)读者——写者问题:共享数据的两类使用者,读读允许,读写互斥,写写互斥。
用信号量描述每个约束:信号量WriteMutex控制读写操作的互斥,初始值1;读者计数Rcount,正在进行读操作的读者数目,初始化0;信号量CountMutex,1。
用管程解决读者-写者问题:
(3)哲学家就餐问题:同步互斥
方案:1:
方案2:任何时刻只允许一个哲学家拿到刀叉 ,方法效率低
方案3:变成临界区的操作,两个人可以就餐
- 信号量与管程
- 信号量与管程
- 并发与同步、信号量与管程、生产者消费者问题
- 多进程同步,信号量、管程
- 操作系统的信号量和管程
- 多进程同步,信号量、管程
- 互斥,同步,信号量,管程概述
- 管程
- 管程
- 管程
- 管程
- 管程
- 管程
- 管程
- 管程
- 管程
- 管程
- 管程
- 图像亮度变换函数
- cms系统是什么意思
- jemalloc的使用
- 求两个整数的最大公约数及其应用
- HDU 1285 【简单拓扑】
- 信号量与管程
- JavaScript位操作及其简单应用
- Web应用中大部分跳转路径如何书写
- 客运综合管理系统项目解析-领导查询(模块)-废票查询
- android不为人知的工具集合
- Kth Largest Element in an Array
- H.264/ACC音视频编码流的RTP/RTSP传输实现(1)
- HDU 1596
- 使用Python调用Web Service