网站大量收购闲置独家精品文档,联系QQ:2885784924

扬州大学操作系统综合题.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
扬州大学操作系统综合题

生产者与消费者 设有一缓冲池P,P中含有20个可用缓冲区,一个输入进程将外部数据读入P,另有一个输出进程将P中数据取出并输出。若讲程每次操作均以一个缓冲区为单位,试用记录型信号量写出两个进程的同步算法,要求写出信号量的初值。 解: semaphore?mutex=1; semaphore?empty=20; semaphore?full=0; int?in,out?=?0; item p [20]; void?Producer(){ while(ture){ ???????producer an item in nextp; wait(empty); wait(mutex); p[in] := nextp; in := (in+1) mod 20; signal(mutex); signal(full); ? } } void?Consumer(){ while(ture){ wait(full); wait(mutex); nextc := p[out]; out := (out+1) mod 20; signal(mutex); signal(empty); } } 有一群生产者进程在生产产品,此产品提供给消费者去消费。为使生产者和消费者进程能并发执行,在它们之间设置一个具有n个缓冲池,生产者进程可将它所生产的产品放入一个缓冲池中,消费者进程可从一个缓冲区取得一个产品消费。semaphore mutex=1,empty=n,full=0; item buffer[n]; //缓冲区 int in=out=0; //输入、输出指针 void producer() { while(1) { 生产一个产品nextp; … wait(empty); //等待空缓冲区的数目非0 wait(mutex); //等待无进程操作缓冲区 buffer[in]= nextp; //往Buffer [in]放产品 in = (in+1) mod n; signal(mutex); //允许其它进程操作缓冲区 signal(full); //增加已用缓冲区的数目 } } void consumer() { while(1) { …… wait(full); //等待已用缓冲区的数目非0 wait(mutex); //等待无进程操作缓冲区 nextc = buffer[out]; //从Buffer [out]取产品 out = (out +1) mod n; signal(mutex); //允许其它进程操作缓冲区 signal(empty); //增加空缓冲区的数目 消费nextc产品; } } main() { cobegin{ producer(); consumer(); } } } 利用AND信号量解决生产者-消费者问题 semaphore mutex=1,empty=n,full=0; item buffer[n]; //缓冲区 int in=out=0; //输入、输出指针 void producer() { while(1) { … 生产一个产品nextp; … swait(empty, mutex); buffer[in]= nextp; //往Buffer [in]放产品 in = (in+1) mod n; ssignal(mutex, full); } } void consumer() { while(1) { …… swait(full, mutex); nextc = buffer[out]; //从Buffer [out]取产品 out = (out +1) mod n; signal(mutex, empty); 消费nextc产品; } } Begin Parbegin Process Reader:begin repeat wait(readcount); wait(mutex); 填入座号和姓名完成登记; signal(mutex); 阅读 wait(mutex) 删除登记表中的相关表项,完成注销 signal(mutex); signal(readcount); until false; end; parend; End; 在公共汽车上,司机和售票员各行其职,司机负责开车和到站停车;售票员负责售票和开、关车门;当售票员关好车门后驾驶员才能开车行驶。试用wait和signal操作实现司机和售票员的同步。 var s1,s2:semaphore:=0,0; begin parbegin Process Driver begin repeat go right; stop

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档