- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
问题描述:??一个房间内有6位哲学家,他们的生活就是思考和进食。哲学家思考后,过一定的时间就会饥饿,饥饿之后就想吃饭,吃饭后再思考。房间里有一张圆桌,桌子周围放有6把椅子,分别属于6位哲学家,每两位哲学家之间有1支筷子,哲学家进食时必须同时使用左右两支筷子。 问题: 写出哲学家进餐的算法描述。 philosopher(i); begin if(i%2!=0)//奇号哲学家 { p((i+1)%6); p(i); eating; v(i+1); v(i); thinking; } else//偶号哲学家 { p(i); p(i+1); eating; v(i); v(i+1); thinking; } end 写出你的算法如何解决死锁问题,即不能6位哲学家各拿到1支筷子,但都吃不上。 1)解决方案:让奇数号的哲学家先取右手边的筷子,让偶数号的哲学家先取左手边的筷子;这样、任何一个哲学家拿到一支筷子以后,就已经阻止了他的邻座的一个哲学家吃饭的企图(如1号哲学家由于他是奇号哲学家故先取右手边的2号筷子,当他取到2号筷子时就已经阻止了2号哲学家吃饭的企图、因为2号哲学家是偶号哲学家要想吃饭必需先拿到左手边的筷子2号筷子),在这种情况下除非某个哲学家一直吃下去,否则不会有人饿死。 2)这种排除死锁的方法属于死锁的预防即限制并发进程对资源的请求,从而使死锁的必要条件在系统执行的任何时间都不满足。 用C程序实现哲学家进餐。(注:可以使用共享变量的方式,也可以使用信号量的方式来实现) #includesys/types.h #includesys/sem.h #includesys/shm.h #includestdio.h #includestdlib.h void vop(),pop(); struct sembuf askfor_res,free_res; main() { int semid; int i; semid=semget(IPC_PRIVATE,6,0666|IPC_CREAT);//创建信号量集合 printf(This sem number is %d\n,semid); for(i=0;i6;i++)//初始化信号量 { if(semctl(semid,i,SETVAL,1)==-1) perror(sem set value error); } int pid0,pid1,pid2,pid3,pid4,pid5; while((pid0=fork())==-1); if(pid0==0)//0号哲学家 { while(1) { pop(semid,0);//偶号哲学家先取左手边的筷子0 pop(semid,1);//取右手边筷子 printf(0 philosopher eating\n); sleep(1); vop(semid,0); vop(semid,1); printf(0 philosophers thought\n); sleep(3); } } else { while((pid1=fork())==-1); if(pid1==0)//1号哲学家 { while(1) { pop(semid,2);//奇号哲学家先取右手边的筷子 pop(semid,1);//取左手边筷子1 printf(1 philosopher eating\n); sleep(1); vop(semid,2); vop(semid,1); printf(1 philosophers thought\n); sleep(3); } } else { while((pid2=fork())==-1); if(pid2==0)//2号哲学家 { while(1) { pop(semid,2);//偶号哲学家先取左手边的筷子2 pop(semid,3);//取右手边筷子3 printf(2 philosopher eating\n); slee
您可能关注的文档
最近下载
- 能耗桥画法示例.ppt VIP
- 2024-2030全球高温氨裂解催化剂行业调研及趋势分析报告.docx
- 2025年吉林省中考英语真题卷含答案解析 .pdf VIP
- 23G409先张法预应力混凝土管桩图集.PDF VIP
- P-02 【中信苏宁】资产支持专项计划计划说明书-20141111.pdf VIP
- 中国人寿:养老险总公司招聘笔试题库2025.pdf
- 设计旅游线路课件(共18张PPT)《旅行社计调业务》(中国言实出版社).pptx VIP
- 2025金考卷45套化学新高考版主书.docx
- 1401沟通你我他——大学生人际交往幻灯片课件.ppt VIP
- 循环水泵能耗桥分析与节能改造实践.pptx VIP
文档评论(0)