生产者-消费者问题Shareddatasemaphorefull=0empty=nmutex=1.PPTVIP

生产者-消费者问题Shareddatasemaphorefull=0empty=nmutex=1.PPT

  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文档。上传文档
查看更多
生产者-消费者问题Shareddatasemaphorefull=0empty=nmutex=1

6.* OSC 经典同步问题 主讲教师:夏莹杰 xiayingjie@ 经典进程同步问题 经典进程同步问题是从进程并发执行中归纳的典型例子。主要的经典同步问题有生产者-消费者问题、读者-写者问题、哲学家进餐问题等。 生产者-消费者问题(producer-consumer Problem ) 生产者-消费者问题是最著名的同步问题,它描述一组生产者(P1 ……Pm)向一组消费者(C1……Cq)提供消息。它们共享一个有界缓冲池(bounded buffer pool),生产者向其中投放消息,消费者从中取得消息,如下图所示。生产者-消费者问题是许多相互合作进程的一种抽象。 生产者-消费者问题 假定缓冲池中有n个缓冲区,每个缓冲区存放一个消息。由于缓冲池是临界资源,它只允许一个生产者投入消息,或者一个消费者从中取出消息。即生产者之间、生产者与消费者之间、消费者之间都必须互斥使用缓冲池。所以必须设置互斥信号量mutex,它代表缓冲池资源,它的数值为1。 P1 Pm C1 Cq B0 B1 …. …... ……… Bn-1 生产者-消费者问题 生产者和消费者二类进程之间应满足下列二个同步条件: 只有在缓冲池中至少有一个缓冲区已存入消息后,消费者才能从中提取消息,否则消费者必须等待。 只有缓冲池中至少有一个缓冲区是空时,生产者才能把消息放入缓冲区,否则生产者必须等待。 为了满足第一个同步条件,设置一个同步信号量full,它代表的资源是缓冲区满,它的初始值为0,它的值为n时整个缓冲池满。 为了满足第二个同步条件,设置另一个同步信号量empty,它代表的资源是缓冲区空,它的初始值为n,表示缓冲池中所有缓冲区空。 生产者-消费者问题 Shared data semaphore full=0, empty=n, mutex=1; main() cobegin{ }coend Ci //消费者进程 do { P(full); P(mutex); … remove an item from buffer to nextc … V(mutex); V(empty); … consume the item in nextc … } while (1); Pi //生产者进程 do { … produce an item in nextp … P(empty); P(mutex); … add nextp to buffer … V(mutex); V(full); } while (1); 读者-写者问题The Readers-Writers Problem 一个数据集(如文件)如果被几个并行进程所共享: 有些进程只要求读数据集内容,它称读者 一些进程则要求修改数据集内容,它称写者 几个读者可以同时读些数据集,而不需要互斥 一个写者不能和其它进程(不管是写者或读者)同时访问些数据集,它们之间必须互斥。 信号量及变量设置: 写者与写者及读者需要互斥,用互斥信号量wrt表示,初值为1 readcount变量来记录读者数,初值为0 由于readcount是读者间共享变量,属于临界资源,它也需互斥,设置互斥信号量mutex,初值为1。 读者写者问题: Shared data semaphore mutex=1, wrt=1; int readcount = 0;// readcount变量来记录读者数 main() cobegin{ Writer process: while(1){ wait(wrt); … writing is performed … signal(wrt); } 读者写者问题: Reader Process: while(1){ wait(mutex); readcount++; if (readcount == 1) wait(wrt); signal(mutex); … reading is performed … wait(mutex); readcount--; if (readcount == 0) signal(wrt); signal(mutex); } }coend 哲学家进餐问题Dining-Philosophers Problem 问题描述(由Dijkstra首先提出并解决) : 5个哲学家围绕一张圆桌而坐,桌子上放着5支筷子,每两个哲学家之间放一支; 哲学家的动作包括思考和进餐,进餐时需要同时拿起他左边和右边的两支筷子,思考时则同时将两支筷子放回原处。 如何保证哲学家们的动作有序

您可能关注的文档

文档评论(0)

suijiazhuang1 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档