网站大量收购闲置独家精品文档,联系QQ:2885784924

第3章进程同步与通信xiugai.ppt

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

第3章 进程同步与通信;取空闲块的进程Getspace: Begin 局部变量 g g=stack[top] top=top-1 返回值为g End;●;程序的制约方式有如下两种 : (1)间接制约方式。?互斥 这是由于竞争相同资源而引起的,得到资源的程序段可以投入运行,而得不到资源的程序段就是暂时等待,直至获得可用资源时再继续运行。 (2)直接制约方式。?同步 这通常是在那些逻辑上相关的程序段之间发生的。一般是由于各种程序段要求共享信息引起的。;进程同步的基本概念;;例:P1,P2两线程共享变量COUNT(COUNT的初值为5) P1:{ R1=COUNT; R1=R1+1; COUNT=R1; } P2:{ R2=COUNT; R2=R2+1; COUNT=R2; };While(1){ ;互斥实现的硬件方法;;互斥实现的软件方法;//进程0 while (flag[1]) //什么都不做 ; flag[0]=true; 临界区; flag[0] =false; 剩余区; //进程1 while ( flag[0]) //什么都不做 ; flag[1]=true; 临界区; flag[1] =false; 剩余区;;//进程0 flag[0]=true; while (flag[1]) //什么也不做; 临界区; flag[0] =false; 剩余区;;//进程0 flag[0]=true; turn=1; while (flag[1]) (turn==1) //什么也不做; 临界区; flag[0] =false ; 剩余区;;信号量和PV操作;信号灯的PV操作;从资源的观点看信号灯的意义: ● s.value的初值表示系统中某种资源数目。 ● wait(s)表示要申请一个资源。 ● signal(s)表示要释放一个资源。 ● s.value 0时,|s.value|表示等待队列的进程数。;信号量和P,V原语;sem为互斥信号量,取值(1,0,-1)。 sem=1表示有一个空闲资源。即,进程PA和PB都没进临界区。 sem=0表示有0个空闲资源。即,某进程已经进入临界区 sem=-1表示差一个空闲资源。即,某进程已经进入临界区,但另有一进程已经做了P原语,正在等待。;用信号灯解决互斥问题;A: 测试,直到buf为空 计算 计算结果?buf goto A;A: wait(Bufempty) 计算 计算结果?buf Bufempty=false signal(Buffull=true) goto A;私用信号量;用P,V原语实现同步;用信号灯解决同步问题;●生产者——消费者问题 ●读者——写者问题 ●哲学家进餐问题 ●打磕睡的理发师问题 ;生产者-消费者问题;用信号量解决“生产者-消费者”问题;读者-写者问题;;void reader() /*读者进程*/ {while (true) { P(Rmutex); if (Rcount == 0) P(Wmutex); Rcount = Rcount + 1; V(Rmutex); read; /* 执行读操作 */ P(Rmutex); Rcount = Rcount - 1; if (Rcount == 0) V(Wmutex); V(Rmutex); }};哲学家进餐问题;;打磕睡的理发师问题 ;用信号量解决打磕睡的理发师问题; 用信号量解决了很多同步和互斥问题,但在解决问题的过程中,我们也发现还存在一些问题,如 在生产者和消费者问题中两个P操作的位置不能颠倒; 哲学家进餐问题中的死锁现象等。 这些问题的出现促使AND信号量的产生 。;Swait(s1,s2,…,sn) {if (s1 = 1 s2 = 1 … sn= 1) { /* 满足资源要求时*/ for (i = 1; i = n; i = i + 1) si = si -1; } else { /* 某些资源不能满足要求时*/ block(si.queue ) /*将进程投入第一个小于1的信号量的等待队列si.queue */ ; } } ;AND信号量定义;用AND信号量解决哲学家进餐问题;管程机制;●一个管程定义了一个数据结构和能为并发进程所执行(在该数据结构上)的一组操作,这组操作能同步进程和改变管程中的数据。 ●管程 = 数据结构 + 操作 + 对数据结构中变量的初始化 ;;条件变量 ●用管程实现进

文档评论(0)

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

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

1亿VIP精品文档

相关文档