LEC11 并发程序设计含PV操作 管程 消息.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
使用信号量编程的运行示意图 从绿色箭头区域看,临界区是交替而互斥使用的。 Producer/Consumer Problem One or more producers are generating data and placing these in a buffer One or more consumer are taking items out of the buffer one at time Binary Semaphore 两个原则: (1)临界区要尽可能小, (2)【经典】PV操作不是个数上一一对应,而是从路径上意义对应。 资源守恒,资源是操作系统管的,一个P不可能对应两个V(路径上),也不能对应。 每一层软件都是对上一层软件的资源的管理。 不能容忍,解决一个问题的完整程序集,可以包含多个进程,其中的PV一定是一一对应的。 这个程序的问题,对每个航班都加锁,会影响并发性。 Binary Semaphore 3分钟思考这个问题怎么求解, 有五个互斥资源,应该有五个信号量,初值都是1, 这个程序是否正确? 资源,按照层次分配, 先优先级大的资源,再申请优先级小的资源。 层次分配。 最简明的思路,是知道有一个环路等待,破坏这个环路的出现。 一个临界区,建立一个信号量,进临界区之前P,出临界区时V操作。 临界区的相关度一定要小。 如果这个临界区与两个信号量相关,要注意死锁。 操作系统中除了实实在在的资源以为,引进软资源概念,这是操作系统伟大的进入。 尽管所有的生产者进程和消费者进程都是以异步的方式运行的,但它们之间必须保持同步,即不允许消费者进程到一个空缓冲区去取产品,也不允许生产者进程向一个已装有消息尚未被取走产品的缓冲区投放产品。 一个或者多个生产者生产产品并向缓冲区放入这些数据 一个或者多个消费者从缓冲区取出产品并消费Producer/Consumer Problem One or more producers are generating data and placing these in a buffer One or more consumer are taking items out of the buffer one at time 不能决定这个盘子是否是空的, 这个信号量在生产者进程中只有P没有V, 一旦放入产品之后,可以告诉消费者进程,盘子里有产品了,你们可以来用。 一旦放入之后,盘子里就有产品了,可以来用。 生产者关心:盘子是否是空,消费者关心:盘子是否有产品 在路径上是一一对应的。 为什么需要两个信号量, 设想一下,进程互斥,我能否用这个变量,使用方式【我能不能用这个变量】。 是不是空,是不是有产品。 信号量是与共享变量无关的,不是密切相关的。 对这个共享变量的使用方式。 生产者关心:盘子是否是空,消费者关心:盘子是否有产品 引申一下这个问题: 放加工数据, 一个放原始数据,另一个放加工数据。 第一:关心盘子是否空,第二:盘子是否有产品,第三:盘子是否有被挪过。 P(S1) | P(S2) | P(S3) | V(S2) | V(S3) | V(S1) | PV操作是跟共享变量的使用方式相关的。 这个依赖关系,形成换。 离散数学的格的结构,有上确界和下确界。 放是在0号单元开始放,取也是从0号单元开始取。 安排有序的指针,对于程序的正确性也是很关键的。 如果只有1个生产者,1个消费者,putptr不需要互斥,getptr不需要互斥 如果有多个生产者,putptr和getptr都是共享变量,需要互斥。 这个程序不好,性能问题,没有必要将putptr和getptr两个共享变量,合用一个互斥信号量s。 如果只有1个生产者,1个消费者,putptr不需要互斥,getptr不需要互斥 如果有多个生产者,putptr和getptr都是共享变量,需要互斥。 这个程序不好,性能问题,没有必要将putptr和getptr两个共享变量,合用一个互斥信号量s。 三个模版,互斥 背下来,灵活应用,60%~70%,甚至80%的PV操作题。 只要保证有向边不出现环路, P操作是建立有向边的过程。 V操作不会产生死锁,V操作是拆环,不用关心V操作。 对于每一种共享资源定义一个信号量,信号量的初值表示, 谨慎防止有向环路。 保证P和V在进程组中是成对的。 如果盘子能放两个水果, 要自己思考, 有几种使用方式,最多四种, 盘子缓冲区,取东西的共享变量, 四个进程需要互斥, 互斥变量只有一个。 四个进程, 对压栈,程序设计技巧, 变体:多个儿子、多个女儿 不放独木桥, 下周五管程、消息 下下周五课堂测验 Producer/Consumer Problem One or more producers

文档评论(0)

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

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

1亿VIP精品文档

相关文档