操作系统生产与消费者问题.pdf

  1. 1、本文档共64页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
{消费者行为分析}操作系 统生产与消费者问题 一、生产者和消费者问题 1 、有n 个缓冲区,一个生产者和一个消费者情况: main() {intS=1;//可否进入缓冲区 intfull=0;//产品数目 intempty=n//可用缓冲区数 intbuffer[n]; intin=0;//指向下一个可放产品的缓冲区 intout=0;//指向下一个可取产品的缓冲区 producer(); consumer(); } producer() { While(生产未结束) {produceaproduct P(empty); P(S); Buffer[in]=product; in=(in+1)modn; V(S); V(full); } } consumer() { While(消费未结束) {P(full); P(S); TakeaproductfromBuffer[out] Out=(out+1)modn; V(S); V(empty); } Consumetheproduct } 2 、m 个生产者和 k 个消费者共享 n 个缓冲区的情况: main() { intB[n];//缓冲区 intp=r=0;//p 表示生产者指针,r 表示消费者指针 intS=1;//可否进入缓冲区 intfull=0;//产品数目 intempty=n;//可用缓冲区数 producer-i(i=1,2,…,m); consumer-j(j=1,2,…,k); } Producer-i(i=1,2,…,m) { while(producingdoesnotend) { produceaproduct P(empty); P(S); B[p]=product; p=(p+1)modn;//每放入一个产品,位置指针后移一位 V(S); V(full); } } Consumer-j(j=1,2,…,k) { while(continuetoconsume) { P(full); P(S); TakeaproductfromB[r] r=(r+1)modn;//从第一个开始,消费一个后,指向下一个 V(S); V(empty); Consume } } 二、读者与写者问题 1 、 读者与写者有相同的优先级的情况: main() { intS=1;//读者与写者,写者与写者间的互斥,即可否修改文件 intSr=1;//可否修改读者个数 intrc=0;//读者个数 reader(); writer(); } reader() { While(读过程未结束) { P(Sr); if(rc==0) {P(S); rc=rc+1; V(Sr); readfileF } else { rc=rc+1; V(Sr); readfileF } P(Sr); rc=rc-1; if(rc==0)V(S); V(Sr); } } writer() { While(写过程未结束) { P(S); WritefileF V(S); } } 2 、写者优先问题: main() { intS=1;//读者与写者,写者与写者间的互斥,即可否修改文件 intSn=n;//最多有n 个进程可以同时进行读操作 reader(); writer() } reader(i) { P(S); P(Sn); V(S); ReadfileF V(Sn); } writer(j) { P(S) WritefileF V(S); } 例题 1 、有一个阅览室,读者进入时必须先在一张登记表上进行登记。该表为每一座位列出一个 表目,包括座号、姓名。读者离开时要撤消登记信息。阅览室有 100 个座位,试问: (1) 为描述读者的动作,应编写几个程序?,应该设置几个

文档评论(0)

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

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

1亿VIP精品文档

相关文档