05进程管理2互斥和同步一.ppt

  1. 1、本文档共81页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * 4 用信号量实现进程的同步--- 生产者-消费者问题 思考1:mutex和empty两个信号量之间有什么区别吗? 思考2:多信号量的操作顺序有要求吗? 互斥信号量 mutex:防止多个进程同时进入临界区 同步信号量 empty和full:保证事件发生的顺序 缓冲区满时,Producer停止运行 缓冲区空时,Consumer停止运行 概念差别——互斥与同步(并发的两个要素) 互斥:保护临界区,防止多个进程同时进入 同步:保证进程运行的顺序合理 思考 生产者进程中,两个wait操作的顺序能否互换? 生产者进程先执行wait(mutex),再执行wait(empty), 何时会出错? 消费者进程中,先wait(mutex),再wait(full)何时会出错? * 如果某种原因使得生产者进程执行了多次,而消费者进程一次也没执行,从而全部缓冲区都存满新数据时,再执行一次生产者进程就会死锁。 如果某种原因使得消费者进程执行了多次,而生产者进程一次也没执行,从而全部缓冲区都为空时,再执行一次消费者进程就会死锁。 * 同步/互斥信号量的使用方法 互斥信号量 必定成对出现:进入临界区——临界区——退出临界区 同步信号量 未必成对出现,依赖于同步关系的性质 同步信号量和互斥信号量的操作顺序 基本原则:互斥信号量永远紧邻临界区:同步在前,互斥在后。 * 2.4.2 信号量集 一段处理代码需要同时获取两个或多个临界资源――可能死锁:各进程分别获得部分临界资源,然后等待其余的临界资源,各不相让 基本思想:在一个原语中,将一段代码同时需要的多个临界资源,要么全部分配给它,要么一个都不分配。称为Swait(Simultaneous Wait)。在Swait时,各个信号量的次序并不重要,虽然会影响进程归入哪个阻塞队列,但是由于是对资源全部分配或不分配,所以总有进程获得全部资源并在推进之后释放资源,因此不会死锁。 信号量集用于同时需要多个资源时的信号量操作; 1. AND型信号量集 AND型信号量集用于同时需要多种资源且每种占用一个时的信号量操作; * Swait(S1, S2, …, Sn) //P原语; { while (TRUE) { if (S1 =1 S2 = 1 … Sn = 1) { //满足资源要求时的处理; for (i = 1; i = n; ++i) --Si; //注:与wait的处理不同,这里是在确信可满足 //资源要求时,才进行减1操作; break; } else { //某些资源不够时的处理; 调用进程进入第一个小于1信号量的等待队列Sj.L; 阻塞调用进程; 将调用进程的PC置为swait操作开头 } } } * Ssignal(S1, S2, …, Sn) { for (i = 1; i = n; ++i) { ++Si; //释放占用的资源; for (each process P waiting in Si.L) //检查每种资源的等待队列的所有进程; { 从等待队列Si.L中取出进程P; 进程P进入就绪队列; } } } } 需要注意: 原先处于阻塞状态的进程,被唤醒后,从何处开始执行? 与 记录型信号量机制有何不同? * 2. 一般“信号量集” 一次需要N个某类临界资源时,就要进行N次wait操作--低效又可能死锁 基本思想:在AND型信号量集的基础上进行扩充:进程对信号量Si的测试值为ti(用于信号量的判断,即Si = ti,表示资源数量低于ti时,便不予分配),占用值为di(用于信号量的增减,即Si = Si - di和Si = Si + di) Swait(S1, t1, d1; ...; Sn, tn, dn); Ssignal(S1, d1; ...; Sn, dn); 一般信号量集用于同时需要多种资源、每种占用的数目不同、且可分配的资源还存在一个临界值时的处理; * 一般信号量集的几种特定情况: Swait(S, d, d)表示每次申请d个资源,当少于d个时,便不分配; Swait(S, 1, 1)表示互斥信号量; Swait(S, 1, 0)作为一个可控开关 当S=1时,允许多个进程进入临界区; 当S=0时,禁止任何进程进入临界区; 一般信号量集未必成对使用Swait和Ssignal:如:一起申请,但不一起释放; * 1. 生产者-消费者问题(the producer-consumer problem) 问题描述:若干进程

文档评论(0)

younaifcg + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档