(1.23)--用信号量解决同步问题.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* 信号量的应用 2、用信号量的P、V操作实现同步 进程的同步是指相互合作的一组进程,各自以独立、不可预知的速度向前推进,在此过程中必须要协调步伐,才能更好完成同一项任务。为了解决这一问题,同样引入信号量,称为同步信号量。 我们可以用同步信号量来描述前驱后继关系。 P1 P2 P3 * semaphore S1=S2=0;//表示P1和P2都没做,还没给P3发消息 void P1( ) { …… V(S1); } void P2( ) { …… V(S2); } void P3( ) { P(S1); P(S2); …… } * 利用信号量实现前趋关系:这是一类同步问题,解法固定。 对同步问题,合作进程间需要收发几条消息相应就设置几个信号量,且同步信号量的初值一般为0,表示消息未产生。 初始结点对应的操作可直接执行,然后用V操作给其各个后继结点分别发一条“已完成前趋操作”的信息。 中间结点对应的操作:执行前用P接收前趋结点发来的信息,执行后用V操作给后继结点发一条已完成的信息。 终止结点:必须在该结点分别用P操作收到各个前趋的消息后才能执行。 * 信号量的应用 例:并发执行的进程P1和P2中,分别有代码段C1和C2,要求c1在C2开始前完成。 现在设置一个表示前驱的关系的信号量s12, 其初值为0。 C1 C2 semaphore s12= 0; //s12代表前驱关系 void P1( )  { while(1)   {   C1;   V(s12); } } void P2( )  { while(1)   { P(s12);   C2;   } } * 信号量的应用 2、利用信号量的P、V操作实现同步 说明: 同步信号量的初值一般为0。 同步信号量的P、V原语要成对出现,但是,它们分别出现在不同的进程代码中。 * 一条小河上有一座东西向独木桥,规定每次只允许一个人过桥。现河东和河西都有人在等待过桥,如果把每个过桥者看做一个进程,为保证安全,用信号量和P、V操作来管理。希望东边有人过桥后,西边也有个人过桥,两边轮流过。 semaphore s1= 1;//s1代表东边的人先过桥 semaphore s2= 0;//s2代表西边的人先让东边的人过桥 void e2w( )  { while(1)   { P(s1);   pass( );   V(s2); } } void w2e( )  { while(1)   { P(s2);   pass( );   V(s1); } } * 信号量的应用 例: 有A、B两进程,A进程从卡片机读信息入单缓冲区,B进程负责加工读进单缓冲区的信息。假设A进程只读一次信息,B进程只取一次信息。 分析: A进程,向单缓冲区写入信息 B进程,从单缓冲区读出信息 A、B两进程之间存在相互制约的关系。 单缓冲区buf A B * semaphore s=0; //s代表缓冲区中没数据,也就是A没有给B发消息,应让PA先放数据 void PA( )  {   putdata( );   V(s); } void PB( )  { P(s); getdata( );  } * 信号量的应用 信号量及P、V操作讨论 1) 信号量的物理含义: S.value0表示有S.value个资源可用. S.value=0表示无资源可用. S.value0则| S.value |表示信号量S的等待队列中的进程个数. P(S):表示申请一个资源. V(S):表示释放一个资源. 信号量的初值应该大于等于0. 互斥信号量的初值一般是1。 同步信号量的初值一般为0. * 信号量的应用 2) P.V操作必须成对出现 (1)有一个P操作就一定有一个V操作 (2)当为互斥操作时,它们同处于同一进程. (3)当为同步操作时,则不在同一进程中出现. (4)如果P(s1)和p(s2)两个操作在一起,那么P操作的顺序至关重要:一个同步P操作与一个互斥P操作在一起时,同步P操作在互斥P操作前。 (5)两个V操作顺序无关紧要。 * 信号量的应用 讨论 对于两个并发进程共享一个程序段,而每次只允许一个进程进入该程序段,互斥信号量可能的取值: 互斥信号量的值仅取1、0和-1

您可能关注的文档

文档评论(0)

奉献教育1688 + 关注
实名认证
文档贡献者

心有凌云志,无高不可攀!

1亿VIP精品文档

相关文档