信号量是荷兰计算机科学家Dijkstra65年提出.ppt

信号量是荷兰计算机科学家Dijkstra65年提出.ppt

  1. 1、本文档共36页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
信号量是荷兰计算机科学家Dijkstra65年提出

§4.3 信号量 (P,V操作);2. P,V操作;P,V操作的功能描述见下图:; P,V操作可用软件(或固件)和硬件来执行。无论P操作和V操作,它们的执行都必须是一个 不可被中断的整体。;例:S = 4;本书原来使用P、V操作来称呼此两操作,但由于信号量和信号量上的同步原语以及后面要讨论的管程均已成为并行程序语言的组成部分,所以改用程序语言中的习惯称呼,以及国际上较流行的称呼为Wait和Signal操作。;3. 当进程必须在信号量S上等待时,就将该进程的状态变为等待状态(或活动阻塞状态),并将该进程插入与此信号量有关的等待队列中,而后让出处理机给其它就绪进程。;(2) “ 阻塞等待”执行分式:;wait(s): S.value: = S. value ? 1; if S. value 0 (说明 S原 ? 0或1,无资源) then begin Insert (*, S. L); {把调用者进程*的进程控制块PC B插入信号量S的等待队列L中} Block (*); {把调用者进程变为阻塞,并调用进程调度程序以便选一新的就绪进程到处理机上运行} end;signal(s): S. value: = S.value + 1 if S. value ? 0 (说明: S. Value原?–1,处在等待队列中) then begin Remove (S. L, id); {在信号量S的阻塞队列L中,选一进程移出队列,并把进程标识号(PCB)送入id中} Wakeup (id); {把该进程id的状态转换或活动就绪状态,并根据id进程的优先数高低决定是否需要抢占现行进程的处理机} end;阻塞等待的同步原语一般适用于单处理器系统,忙等待的同步原语一般适用于多处理器系统。因为在单处理器系统中使用忙等待方式将造成处理器时间较大的浪费。而在多处理器系统中忙等待方式造成的处理器时间的浪费,由于临界段通常很短而可以忍受。而且忙等待方式可以减少进程间开关的开销。;一、利用信号量实现互斥;begin muter: = 1; {共享资源只有1个} cobegin PA: begin var N: integer; P(mutex); N: =count; N: =N+1; count: =N; V(mutex); end PB: begin var M: integer; P(mutex); M: = count; M: =M+1; count: =M; V(mutex); end; coend end;[例2] 几个进程共同执行时互斥;二、利用信号量实现同步;信号量作为进程的阻塞和唤醒机构;例如两个协同进程A和B,进程A要等待进程B的计算结果。则这两个进程的执行如下:;[例1]. (第一类); Pragram begin SB: = 0 SC: = 0 Cobegin PA: Begin ? V(SB) V(SC) end PB: Begin P(SB) ? end Coend end ;其他同步的例子;(2) 举例;解:信号量:SA ––– 缓冲区是否有结果;[注

文档评论(0)

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

教师资格证持证人

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

领域认证该用户于2024年04月12日上传了教师资格证

1亿VIP精品文档

相关文档