并发性:互斥和同步.pptVIP

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

例1: 银行的联网储蓄业务允许储户同时使用存折和储蓄卡对同一账户进行存取款操作,如果某储户同时办理两笔存款业务(分别存入1000元和2000元) 从系统的角度看,有两个进程将同时对账户的余额进行操作,如果两个进程同时读出账户的余额(假设为5000元),那么两个进程执行完的结果分别为6000元(5000+1000)、7000(5000+2000)元 分析及措施 最后,储蓄余额可能为6000或者7000,都是不正确的。 原因是:两个进程同时修改同一个数据,而没有进行有效控制。 正确地方法:如果有多个进程同时对同一数据进行修改时,系统必须控制一次仅允许一个进程完成读数据、修改数据两件事,才允许其他进程对同一数据的读和修改操作。 8.1 互斥和同步 硬件方法 软件方法 信号量方法 管程方法 消息传递方法 8.2.1 实现互斥的硬件方法 硬件方法由于需要太强的硬件约束条件,以及可能导致进程饥饿与死锁现象,没有成为通用的解决方法。 8.2.2 实现互斥的软件方法 软件方法: 软件方法是指由进程自己,通过执行相应的程序指令,实现于其他进程同步与互斥,无须专门程序设计语言或os的支持。 实践证明,该方法很难正确控制进程间的互斥与同步,而且可能会大大的增加系统的额外开销 1、下述算法是解决两进程互斥访问临界区问题的一种方法。试从“互斥”,“空闲让进”,“有限等待”三方面讨论他的正确性,如果是正确的,则证明之,如果不正确,说明理由。 var c1,c2:integer:=1,1; begin parbegin p1:begin repeat remain section1; repeat c1:=1-c2; until c20 临界区 c1:=1; until false 8.3 信号量与P、V操作 8.3.1 信号量与P、V操作定义 信号量的物理含义:s.conunt=0表示还可以执行p(s)而不会阻塞的进程数(可用资源数),每执行一次wait操作,就意味着请求分配一个单位的资源;当s. count0,表示已无资源可用,因此请求该资源的进程被阻塞。此时,s.count的绝对值等于该信号量阻塞队列中的等待进程数,执行一次signal操作,就意味着释放一个单元的资源,若s. count=0,则意味着阻塞队列中还有被阻塞的进程,需要唤醒该队列中的第一个进程,并把它转移到就绪队列中。 通用模式:os内核以系统调用的形式提供wait和signal原语,应用程序通过该系统调用实现进程间的互斥。(自己定义记录型信号量) 工程实践表明,利用信号量方法实现进程互斥是高效的,一直被广泛采用。 8.3.3 用P、V操作实现同步 例2、如图所示,有一计算进程和打印进程,他们共享一个单缓冲区,计算进程不断的计算出结果并将它放入单缓冲区中,打印进程负责从单缓冲区中取出每一个结果进行打印,请用信号量实现他们的同步关系。 分析1---临界资源的角度 两类临界资源:1、空缓冲区 empty 2、满缓冲区 full var empty,full:semaphore:=1,0; begin parbegin cp: begin repeat 计算进程计算; Wait(empty); 把计算结果放入缓冲区; Signal(full); Until false End 分析2:从同步的角度看,两种同步关系: 1、计算进程必须把结果放进缓冲区,打印进程才能打印。 2、计算进程计算出一个进程后,必须等打印进程取走,计算进程才能将下一个结果放入缓冲区。 Var sa,sb:semaphore:=0,0; Begin Parbegin Cp: Begin 计算进程计算出第一个结果; 把计算结果放入缓冲区; Signal(sa); repeat 计算进程计算; Wait(sb); 把计算结果放入缓冲区; Signal(sa); Until false End 8.3.4 用P、V操作实现资源分配 生产者/消费者问题中的互斥与同步 1、生产者和消费者可能同时进入缓冲区,甚至可能同时读写一个存储单元,将导致执行结果不正确。这显然不允许,必须使生产者、消费者互斥进入缓冲区,即某时刻只允许一个实体(生产者或消费者)访问缓冲区,生产者互斥消费者和其他任何生产者。 2、生产者与消费者同步 生产者不能在满缓冲区中写数据,消费者也不能

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档