ch3-3.3信号量与PV操作.pptVIP

  1. 1、本文档共34页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

信号量解决理发师问题(2)

intwaiting=0;/*等候理发顾客坐的椅子数*/intCHAIRS=N;/*为顾客准备的椅子数*/semaphorecustomers,barbers,mutex;customers=0;barbers=0;mutex=1;信号量解决理发师问题(3)

cobeginprocessbarber(){while(true){P(customers);/*有顾客吗?若无顾客,理发师睡眠*/P(mutex);/*若有顾客时,进入临界区*/waiting--;/*等候顾客数少一个*/V(barbers);/*理发师准备为顾客理发*/V(mutex);/*退出临界区*/cut_hair();/*理发师正在理发(非临界区)*/ }}信号量解决理发师问题(4)

processcustomer_i(){P(mutex);//进入临界区if(waitingCHAIRS){//有空椅子吗waiting++;//等候顾客数加1V(customers);//唤醒理发师V(mutex);//退出临界区P(barbers);//理发师忙,顾客坐下等待get_haircut();//否则顾客坐下理发}elseV(mutex);//人满了,走吧!}coend3.3信号量与PV操作3.3.1同步和同步机制3.3.2信号量与PV操作3.3.3信号量实现互斥3.3.4信号量解决五个哲学家就餐问题3.3.5信号量解决生产者-消费者问题3.3.6记录型信号量解决读者-写者问题3.3.7记录型信号量解决睡眠理发师问题3.3.1同步和同步机制著名的生产者--消费者问题是计算机操作系统中并发进程内在关系的一种抽象,是典型的进程同步问题。在操作系统中,生产者进程可以是计算进程、发送进程;而消费者进程可以是打印进程、接收进程等等。解决好生产者--消费者问题就解决好了一类并发进程的同步问题。生产者--消费者问题表述有界缓冲问题有n个生产者和m个消费者,连接在一个有k个单位缓冲区的有界缓冲上。其中,pi和cj都是并发进程,只要缓冲区未满,生产者pi生产的产品就可投入缓冲区;只要缓冲区不空,消费者进程cj就可从缓冲区取走并消耗产品。生产者-消费者问题算法描述(1)

intk;typedefanyitemitem;/*item类型*/itembuffer[k];intin=0,out=0,counter=0;生产者-消费者问题算法描述(2)

processproducer(void){ while(true){/*无限循环*/ {produceaniteminnextp};/*生产一个产品*/ if(counter==k)/*缓冲满时,生产者睡眠*/ sleep(producer); buffer[in]=nextp;/*一个产品放入缓冲区*/ in=(in+1)%k;/*指针推进*/ counter++;/*缓冲内产品数加1*/ if(counter==1)/*缓冲为空,加进一件产品*/wakeup(consumer);/*并唤醒消费者*/ }}生产者-消费者问题算法描述(3)

processconsumer(void){ while(true){/*无限循环*/ if(counter==0)/*缓冲区空,消费者睡眠*/ sleep(consumer); nextc=buffer[out];/*取一个产品到nextc*/ out=(out+1)%k;/*指针推进*/ counter--;/*取走一个产品,计数减1*/ if(counter==k-1)/*缓冲满了,取走一件产品并唤*/wakeup(producer);/*醒生产者*/ {consumetheit

文档评论(0)

晨向阳 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档