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

作业4-参考解答.doc

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

作业4 提示:作业任选三题完成.下周一前完成. 2011年3 姓名: 班级: 学号: 图书馆有100个座位,有一张登记表,要求: 阅读者进入时登记,先取得座位; 出来时,注销;登记表同时只能由一个人使用; 用P、V原语描述一个读者的使用过程。 参考解答: int main(void) { int mutex=1,avail=100; /*mutex用于登记表互斥使用的信号量,初值为1,表示登记表可用,没有被阅读者占用;*/ P(avail); P(mutex); 登记… V(mutex); Reading… P(mutex); 注销登记… V(mutex); V(avail); } 桌上有一个空盘,盘内只允许放一个水果。爸爸专向盘内放苹果,妈妈专向盘内放桔子。儿子等吃盘中的苹果,女儿专等吃盘中的桔子。 若盘内已有水果,放者必须等待,若盘内没有水果,吃者必需等待。用PV操作来协调四人的关系。 定义信号量: mutex用于放水果用的盘子互斥使用的信号量,初值为1,表示盘子中没有水果 appneed是父亲使用的私用信号量,表示盘中没有苹果,可以向其中放苹果了, appavail是儿子所使用的私用信号量,表示盘中已经有苹果了可以取苹果了, orgneed是妈妈使用的私用信号量,表示盘中没有桔子,可以向其中放桔子了, orgavail是女儿所使用的私用信号量,表示盘中已经有桔子了可以取桔子了; int main(void) { int mutex=1,appneed=0,appavail=0,orgneed=0,orgavail=0; cobegin papa(); mama(); son();daughter(); coend } papa() { P(mutex); 放苹果… V(appavail); V(mutex); } mama() { P(mutex); 放桔子… V(orgavail); V(mutex); } son() { P(appavail) P(mutex); 取苹果?…. V(mutex); 吃苹果… V(appneed); } daughter() { P(orgavail) P(mutex); 取桔子?…. V(mutex); 吃桔子… V(orgneed); } 设公共汽车上,司机和售票员的活动分别是: 司机: 启动车辆 售票员: 上乘客 关车门 正常行车 售 票 到站停车 下乘客 开车门 在汽车不断地到站,停车,行使过程中,这两个活动有什么同步关系?并用PV原语描述司机和售票员操作。 参考解答: 定义信号量: start用于司机使用的私用信号量, 表示是否可以启动车辆,初值为1。 stop用于售票员的私用信号量, 表示是否可以关闭车门,初值为0。 int startcar=0,closedoor=0; int main(void) { cobegin busdriver(); service(); coend } busdriverstart() { P(start); 启动车辆… 正常行驶 到站停车 V(closedoor); } conductor() { 关车门 V(start)); 售票 P(closedoor); 开车门 上下客 } 某处有一东、西向单行道,其上交通并不繁忙。试用P、V操作正确实现该东、西向行道的管理:当有车由东向西(或由西向东)行驶时,另一方向的车需要等待;同一方向的车可连续通过;当某一方向已无车辆在行道行驶时,则另一方向的车可以驶入单行道。用PV原语描述该过程。 int main(void) { mutex:=1 ; /* 两个方向车辆的互斥信号灯 */ count:=0 ; /* 计数变量 */ mutexr:=1 ; /* 对计数变量操作的互斥信号灯 */ cobegin fromeasttowest(); fromwesttoeast(); coend } 由东向西行驶的车辆: 由西向东行驶的车辆: fromeasttowest() { P(mutexr); count:=count+1; if(count==1) then P(mutex); V(mutexr); driving from east to west….. P(mutexr); count:=count1-1;

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档