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

用信号量机制来解决进程的同步与互斥:PV操作.doc

用信号量机制来解决进程的同步与互斥:PV操作.doc

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

用信号量机制来解决进程的同步与互斥:PV操作 首先确定进程间的关系,然后确定信号量及其值。 判断进程间是否互斥的关键:看进程间是否共享某一公有资源,一个公有资源与一个信号量相对应。确定信号量的值是一个关键点,它代表了可用资源实体数。 举例:票大厅容纳的人数限制为20人,少于20人时购票者可以进入,否则要在厅外等候。 进程间是同步时:是否存在合作关系,是否需要互通消息 首先判断进程间的关系为同步的,且为各并发进程设置私有信号量,然后为私有信号量赋初值,最后利用PV原语和私有信号量规定各进程的执行顺序。 举例:公交车上司机与售票员的行为,司机到站停车后,售票员方可开门,售票员关门后,司机方可开车。 进程同步应用示例讲解:1 桌上有一个盘子,可以存放一个水果。父亲总是把苹果放在盘子中,母亲总是把香蕉放在盘子中;一个儿子专等吃盘中的香蕉,一个女儿专等吃盘中的苹果。 1)系统要设几个进程来完成这个任务?各自的工作是什么? 2)这些进程间有什么样的相互制约关系? 3)用P,V操作写出这些进程的同步算法(注:标明信号量的含义)。 1)需要四个进程 进程描述: Father:父亲放置苹果的进程; Mother:母亲放置香蕉的进程; Son:儿子吃香蕉的进程; Daughter:女儿吃苹果的进程。 分析: 四人公用一个盘子; 盘子每次只能放一个水果,当盘子为空时,父母均可尝试放水果,但一次只能有一人成功; 盘中是香蕉,儿子吃,女儿等; 盘中是苹果,女儿吃,儿子等。 2)进程之间既有互斥又有同步关系。 Father进程和Mother进程要互斥的向盘中放水果,应设置一互斥信号量dish,初值为1,表示盘子为空; Father进程要设置同步信号量apple,用于给Daughter进程传送消息,初值为0,表示还没有消息产生,即没有放苹果;相应Daughter进程也要向父、母进程传送盘子为空的消息。 Mother进程要设置同步信号量banana,用于给Son进程传送消息,初值为0,表示还没有消息产生,即没有放香蕉。相应Son进程也要向父、母进程传送盘子为空的消息。 3)信号量设置: dish:表示盘子是否为空,初值=1; apple:表示盘中是否有苹果,初值=0; banana:表示盘中是否有香蕉,初值=0。 Father:{ while( true) P ( dish );//判断盘子是否空 将苹果放入盘中; V ( apple );//传消息给女儿进程 } Mather:{ while( true) P ( dish );//判断盘子是否空 将香蕉放入盘中; V ( banana );//传消息给儿子进程 } Son::{ while( true) P ( banana );//判断是否有香蕉 从盘中取出香蕉; V ( dish );//传送盘空消息 吃香蕉;} Daughter::{ while( true) P ( apple );//判断是否有苹果 从盘中取出苹果; V ( dish );//传送盘空消息 吃苹果;} 进程同步应用示例讲解:2 生产者与消费者共用一个有n个缓冲单元的缓冲区,生产者向缓冲区中放产品,消费者从缓冲区中取产品消费。 1)系统要设几个进程来完成这个任务?各自的工作是什么? 2)这些进程间有什么样的相互制约关系? 3)用P,V操作写出这些进程的同步算法(注:标明信号量的含义)。 1)系统需设两个进程 producer进程 :生产产品并向缓冲区中放; consumer进程 :从缓冲区取产品并消费; 分析: 生产者与消费者共用一个缓冲区,但有n个缓冲单元; 对于缓冲区同一时刻只能有一个进程使用; 有空缓冲单元时,生产者可以放,否则等待; 有满缓冲单元时,消费者可以取,否则等待。 2)两进程间有互斥和同步的关系 producer进程和consumer进程要互斥的访问缓冲区,应设置一互斥信号量mutex,初值为1。 producer进程和consumer进程有同步的关系,当没有满缓冲单元时,consumer进程不能消费,当没有空缓冲单元时, producer进程不能向缓冲区放。应为他们设置同步信号量empty=n和full=0,用于互传消息。当empty=0时不能生产,当full=0时不能消费。 3)信号量设置 mutex:保证对缓冲区的互斥访问,初值=1; empty:表示缓冲区中是否有空缓冲单元,初值=n; full: 表示缓冲区中是否有满缓冲单元,初值=0。 producer: { while(1) 生产一个成品; P(empty); P(mutex); 将产品存入缓冲区;

文档评论(0)

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

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

1亿VIP精品文档

相关文档