操作系统(二十二)用信号量机制实现进程互斥、同步、前驱关系
2.3.5 用信号量机制实现进程互斥、同步、前驱关系
目录
2.3.5 用信号量机制实现进程互斥、同步、前驱关系
2.3.5.1 用信号量机制实现进程互斥
2.3.5.2 用信号量机制实现进程同步
2.3.5.3 信号量机制实现前驱关系
2.3.5.1 用信号量机制实现进程互斥
由之前的学习我们知道进程互斥就是在同一时间访问临界资源的进程只能有一个。并且P操作是申请资源并上锁的原语,V操作时释放资源并解锁的原语,我们引用一个互斥信号量mutex表示进入临界区的名额,并设置初值为1来实现进程互斥。
1. 分析并发进程的关键活动,划定临界区(如:对临界资源打印机的访问就应放在临界区)
2. 设置互斥信号量 mutex,初值为 1
3. 在进入区 P(mutex)——申请资源
2.3.5.2 用信号量机制实现进程同步
进程同步就是将并发进程按照一定要求有序推进,以解决并发性带来的问题。
1. 分析什么地方需要实现“同步关系”,即必须保证“一前一后”执行的两个操作(或两句代码)
2. 设置同步信号量 S, 初始为 0
semaphore S = 0; //初始化同步信号量,初值为0P1(){操作1;操作2;V(S);操作3;
}P2(){P(S);操作4;操作5;操作6;
}
以上的代码可以保证操作2发生在操作4之前。因为异步性导致的问题我理解就是资源不足,因为第二步需要第一步所带的资源。所以同步信号量设为了0而非1(1的话意思就是资源十分充足,谁想用访问就行)。因为操作2要发生在操作4之前就是说操作2要为操作4带来所需资源,所以解锁就是释放资源,一定要在前操作之后使用。
2.3.5.3 信号量机制实现前驱关系
前驱关系就是一个同步问题,即某一操作必须在一个操作之后。下图所示的前驱关系:S2必须在S1之后产生,S6必须在S4 S5 S3都完成之后进行。
实现步骤如下:
1. 要为每一对前驱关系各设置一个同步信号量
2. 在“前操作”之后对相应的同步信号量执行 V 操作
3. 在“后操作”之前对相应的同步信号量执行 P 操作
操作系统(二十二)用信号量机制实现进程互斥、同步、前驱关系相关推荐
- 2.3.5 用信号量实现 进程互斥 同步 前驱关系
目录 思维导图 实现进程互斥 实现进程同步 实现前驱关系 思维导图 实现进程互斥 实现进程同步 实现前驱关系
- 二、操作系统——用信号量机制实现进程互斥、同步、前驱关系(详解)
一.什么是进程同步? 二.什么是进程互斥? 临界资源:一个时间段内只允许一个进程使用的资源 为了实现对临界资源的互斥访问,同时保证系统整体性能,需要遵循以下原则: 空闲让进.临界区空闲时,可以允许一个 ...
- 十六、用信号量机制实现进程互斥、同步、前驱关系
一.知识总览 二.信号量机制实现进程互斥 注意: 1.信号量mutex表示进入临界区的名额 2.对不同的临界资源需要设置不同的互斥信号量 3.P.V操作必须成对出现,缺少P(mutex)就不能保证临界 ...
- 8 操作系统第二章 进程管理 信号量 PV操作 用信号量机制实现 进程互斥、同 步、前驱关系
文章目录 1 信号量机制 1.1 整形信号量 1.2 记录形信号量 1.3 信号量机制小结 2 用信号量机制实现进程互斥.同 步.前驱关系 2.1 信号量机制实现进程互斥 2.2 信号量机制实现进程同 ...
- 卡住无法查看到所有进程_进程同步 进程互斥 软件和硬件实现方式 信号量机制 信号量机制实现进程同步,进程互斥,前驱关系...
参考:https://www.bilibili.com/video/av31584226/?p=9 进程具有异步性的特征,异步性是指,各并发执行的进程以各自独立的,不可预知的速度向前推进. 回忆我们之 ...
- 信号量机制实现进程互斥
目录 1.总览 2.信号量机制实现进程互斥 3.信号量机制实现进程同步 4.信号量机制实现前驱关系 5.小结 1.总览 2.信号量机制实现进程互斥 3.信号量机制实现进程同步 4.信号量机制实现前驱关 ...
- 操作系统—用信号量机制实现进程互斥、进程同步和前驱关系
建议将思维导图保存下来观看,或者点击这里在线观看
- 信号量机制实现进程互斥与同步,生产者消费者
生产者
- (二十二)操作系统-生产者·消费者问题
文章目录 一.问题描述 二.问题分析 三.PV操作题目分析步骤 1. 关系分析 2. 整理思路 3. 设置信号量 4. 编写代码 四.能否改变相邻P.V操作的顺序? 五.小结 1. PV操作题目的解题 ...
最新文章
- 第4次作业类测试代码+043+杨晨宇
- Nginx禁止特定用户代理(User Agents)访问(转)
- 如何理解c语言的变量,C语言中变量的理解.PDF
- Vue3.js 全局组价案例入门
- Java多线程(二)之Atomic:原子变量与原子类
- [dp]leetcode 1025. Divisor Game
- modbus-crc16——c语言
- jison解析Cube信息 存入又读取出来
- linux平台下C语言按进程名查找进程号pid
- 使用charles修改服务器返回数据,charles_01_打断点修改接口请求返回数据
- python坐标定位_python实现获取屏幕坐标位置值+VBS模拟鼠标操作
- 《和平精英》迎来史上最严封号:模拟器过检测、手机外设全部凉凉?
- 网络性能分析仪-RFC2544测试
- 圆内接等边三角形的画法_如何画出圆的内接正三角形
- 渗透测试-网页接口加密暴破
- gb酱油和gbt酱油哪个好_酱油标准代码GB与GB/T有什么区别
- 尚硅谷nginx笔记
- 面试官的技术面试技巧与步骤
- php启动,重启,关闭命令
- outlook服务器无法搜索邮件,outlook2010无法搜索解决方法