5并发性(互斥和同步).pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
5并发性(互斥和同步)

5.6.1 读者优先 修正:readcount--; 信号量 wsem 信号量 x 读进程具有优先权,当一个读进程访问数据区时,只要至少有一个读进程正在读,就为读进程保留这个数据区的控制权,写进程可能会处于饥饿状态。 图 5.22 5.6.2 写者优先 图 5.23 修正:writecount--; 信号量:x, y, z, wsem, rsem 当一个写进程声明想写时,不允许新的读进程访问该数据区 进程同步总结 并发 ? 多个进程同时存在 ? 相互影响 非原子操作共享变量 ? 出现语义错误 ? 竞争条件 竞争条件 ? 临界区 ? 互斥 ? 临界区进入方法 复杂的面包店算法?强硬的关中断?硬件支持的TestAndSet 都不适合用户实现 ? 封装成锁 一般的锁会“忙等” ? 引入睡眠 ? 将锁一般化为信号量 所有一切都是为了使用户更容易、使系统更好用(不出错) 信号量用于在进程间发信号,实现互斥 作业 复习题 5.1 5.4 5.6 5.7 5.8 习题 5.3.a 5.7 强信号量操作例子P152 进程A、B和C依赖于D的结果 初始:A运行,S=1(D结果1个可用) A执行P操作,S=0, A转入就绪 2:B转入运行,执行P操作,S=-1 B转入阻塞 3:D转入运行 4:D运行,执行V操作,S=0 B转入就绪 5:D转入就绪,C转入运行 执行P操作,S=-1,被阻塞 而后A、B执行2次P操作 A、B均被阻塞,S=-3 6:D转入运行,执行V操作,S=-2 C转入就绪 semWait简记为P;semSignal简记为V A、B、C、D四个进程,哪些是生产者,哪些是消费者? 5.3.1 互斥 使用信号量s解决互斥方法: 设有n个进程,用数组P(i)表示,所有进程都需要访问共享资源(即临界资源),设计信号量s=1。 互斥实现: 用信号量实现互斥例子 三个进程A、B和C访问一个受信号量保护的共享资源: 5.3.2 生产者/消费者问题(重点) 生产者/消费者问题描述: 有一个或多个生产者生产某种类型数据,并放入缓冲区; 有一个消费者从缓冲区中取数据,每次取一项; 避免缓冲区重复操作,任何时候只有一个生产者或消费者访问缓冲区。 问题: 当缓存已满时,生产者不能继续向其中添加数据; 当缓存为空时,消费者不会从中移走数据。 按缓存大小分类: 无限缓存:缓冲区数量无限制,无限生产,但缓存空时不能消费 有限缓存:缓存大小固定(循环存储器),满时不能生产,空时不能消费 1、使用二元信号量解决无限缓冲区生产者/消费者问题的不正确方法。 2、不使用索引in和out,使用n=in-out记录缓冲区中数据项的个数; 3、信号量s用于实施互斥; 4、信号量delay用于迫使消费者当缓冲区为空时等待; 缺陷:当消费者消耗尽缓冲区中的资源时,需要重置delay,被迫等待到生产者向缓冲区中放置更多的资源。 图 5.9 无限缓存解决方法(二元信号量) 二元信号量原语的定义: P151 无限缓存解决方法(二元信号量) 图 5.9 无限缓存解决方法(二元信号量) 在消费者的临界区引入一个辅助变量m 使用二元信号量解决无限缓冲区生产者/消费者问题的正确方法。 图 5.9 图 5.10 无限缓存解决方法(二元信号量) 图 5.9 无限缓存解决方法(二元信号量) 图 5.10 无限缓存解决方法(二元信号量) 1、变量n为信号量,值等于缓冲区中的项数,资源数; 2、信号量s用于实施互斥 使用一般信号量解决无限缓冲区生产者/消费者问题的正确方法。 问: 1、semSignal(s)与semSignal(n)互换? 2、semWait(n)与semWait(s)互换?死锁风险 n.count=0 有限缓存解决办法(一般信号量) 图 5.11 被阻塞 解除阻塞 生产者:往一个满的缓冲区插入 消费者:移出一项 消费者:从空缓冲区中移出 生产者:插入一项 有限缓存解决办法(一般信号量) 1、变量n为信号量,值等于缓冲区中的项数,资源数; 2、信号量s用于实施互斥; 3、缓冲区有限,视为一个循环存储器; 4、信号量e记录空闲空间的数目;n与e用于实现同步; 使用一般信号量解决有限缓冲区生产者/消费者问题的正确方法。 图 5.13 有限缓存解决办法(一般信号量) 5.3.3

文档评论(0)

jiupshaieuk12 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:6212135231000003

1亿VIP精品文档

相关文档