第2章信号量概念和互斥精读.ppt

  1. 1、本文档共36页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
信号量分为:互斥信号量和资源信号量。 互斥信号量用于申请或归还资源的使用权,常初始为1; 资源信号量用于申请或归还资源,可以常初始为大于1的正整数,表示系统中某类资源的可用个数。 Wait操作用于申请资源(或使用权),进程执行wait原语时,可能会阻塞自己。 signal操作用于释放资源(或归还使用权),进程执行signal原语时,会唤醒一个阻塞进程。 信号量的类型 用P、V操作解决进程间互斥问题 wait(s) signal(s) P1 P2 P3 临界区 wait(s) wait(s) signal(s) signal(s) 1)s-1=1 进入临界资源 2)s-1=0 进入临界资源 3)s-1=-1 P3阻塞 4)s+1=0 唤醒P3 5)s+1=1 释放资源 6)s+1=2 释放资源 例如,系统中有2台打印机,三个进程使用打印机。系统设置一个资源信号量s,初值=2。 P1 () { …. S1; //语句S1 …. } 2. 利用信号量实现前趋关系 P2 () { …. S2; //语句2 …. } 希望 S1 ? S2,只需使进程P1和P2共享一个公用信号量S=0,将signal(S)放在语句S1后,将wait(S)放在语句S2前。 P1 () { …. S1; //语句S1 signal(S); …. } P2 () { …. wait(S); S2; //语句2 …. } 前驱关系:S1→S2和S1→S3。有三个进程P1、P2、P3,P1中有程序段S1,P2中有程序段S2,P3中有程序段S3,在它们并发执行时,希望S1先执行,然后S2、S3才执行,S1→S2、S1→S3。 解决办法:设置两个信号量mutex1、mutex2,分别用来标志前驱关系S1→S2、S1→S3。 semaphore mutex1,mutex2; mutex1.value=mutex2.value=0; P1 () { …. S1; signal(mutex1) ; signal(mutex2); …. } P2 () { …. wait(mutex1); S2; …. } P3() { …. wait(mutex2); S3; …. } 前驱关系:S1→S2→S3,进程P1、P2、P3。 semaphore mutex1,mutex2; mutex1.value=mutex2.value=0; P1 () { …. S1; signal(mutex1) ; …. } P2 () { …. wait(mutex1); S2; signal(mutex2); …. } P3() { …. wait(mutex2); S3; …. } 前驱关系:S1→S3和S2→S3,进程P1、P2、P3。 semaphore mutex1,mutex2; mutex1.value=mutex2.value=0; P1 () { …. S1; signal(mutex1) ; …. } P2 () { …. S2; signal(mutex2); …. } P3() { …. wait(mutex1); wait(mutex2); S3; …. } P1( ) { S1; signal(a); signal(b); } P2( ) { wait(a); S2; signal(c); signal(d); } P3( ) { wait(b); S3; signal(e); } P4( ) { wait(c); S4; signal(f); } P5( ) { wait(d); S5; signal(g); } P6( ) { wait(e); wait(f); wait(g); S6; } main( ) { semaphore a,b,c,d,e,f,g; a.value:=0; b.value=0;……. cobegin p1( ); p2( ); p3( ); p4( ); p5( ); p6( ); coend } 进程P1、P2如下所示,欲实现的前驱关系如图中虚线所示。 P1 () { …. S1; …. S3; …. } P2 () { …. S2; …. S4; …. } semaphore a,b,c; a.value=b.value=c.value=0; P1 () { …. S1; signal(a); …. wait(b); S3; signal(c); …. } P2 () { …. wait(a); S2; signal(b); …. wait(c); S4;

文档评论(0)

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

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

1亿VIP精品文档

相关文档