P、V操作及进程同步的实现2-哲学家就餐问题(共11页)_第1页
P、V操作及进程同步的实现2-哲学家就餐问题(共11页)_第2页
P、V操作及进程同步的实现2-哲学家就餐问题(共11页)_第3页
P、V操作及进程同步的实现2-哲学家就餐问题(共11页)_第4页
P、V操作及进程同步的实现2-哲学家就餐问题(共11页)_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上课 程 设 计课程设计名称: 专 业 班 级 : 学 生 姓 名 : 学 号 : 指 导 教 师 : 课程设计时间: 2010/12/23 计算机科学 专业课程设计任务书学生姓名专业班级学号题 目P、V操作及进程同步的实现2课题性质其它课题来源自拟课题指导教师同组姓名主要内容用语言编程实现P、V原语并用P、V原语哲学家就餐问题:为每个哲学家各编一段程序描述他们的行为,试用P、V操作实现。任务要求 掌握信号量通信方式的一般方法,了解系统实现“阻塞”和“唤醒”功能的方法和技巧。同时掌握进程同步和互斥的概念及实现技术。参考文献任满杰等操作系统原理实用教程 电子工业出版社 2

2、006汤子瀛 计算机操作系统(修订版)西安电子科技大学出版社 2001张尧学 史美林计算机操作系统教程实验指导 清华大学出版社 2000 罗宇等 操作系统课程设计机械工业出版社 2005审查意见指导教师签字:教研室主任签字: 年 月 日 说明:本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页1 需求分析哲学家就餐问题是一种典型的同步问题,它是由Dijstra提出并解决的。该问题描述如下:有五个哲学家,他们的生活方式是交替的进行思考和进餐。哲学家们公用一张圆桌,设5个哲学家分别为A,B,C,D,E,桌子上放着5把筷子,编号分别编号为0,1,2,3,4,桌子中央有一盘饭

3、菜。5个哲学家都很有礼貌,都要等同时拿到身旁的两只筷子才进餐,不然就只是等着继续思考,而且吃了一口之后又马上放下拿起的两根筷子,继续思考。由于筷子数目有限,不能让5个哲学家同事进餐,而且甚至只能让其中的少数哲学家进餐,其他的哲学家只能轮流享用。为每个哲学家各编一段程序描述他们的行为,解决哲学家就餐问题。2 概要设计源程序中各个函数的作用说明:int Readcountn;int chopstickn;/筷子状态标志void Getchopstick(int nextw)/拿起筷子函数。 nextw为哲学家标号void Dropchopstick(int nextr)/放下筷子函数int sel

4、ect();int main()/主函数操作实验结构图:主函数放下筷子函数拿起筷子函数就餐结果3 运行环境硬件环境:基于Xp的PC软件环境:Windows XP4 开发工具和编程语言开发工具:Visual C+ 6.0编程语言:Visual C+5 详细设计#include<stdio.h>#define n 5int in=0;int out=0;int Readcountn;int chopstickn;/筷子状态标志void Getchopstick(int nextw)/拿起筷子函数。 nextw为哲学家标号     printf(&

5、quot;第%d名哲学家肚子饿了,申请左边的筷子。n",nextw);     if(chopsticknextw-1=0|chopsticknextw-1=nextw)              in=nextw-1;         chopstickin=nextw;      &#

6、160;  printf("申请成功!第%d名哲学家已经拿起左边一支编号为%d筷子,申请右边编号为%d的筷子。n",nextw,in,(in+1)%n);         in=(in+1)%n;         Readcountnextw-1=Readcountnextw-1+1;         if(chopsticki

7、n=0|chopstickin=nextw)                      chopstickin=nextw;             Readcountnextw-1=Readcountnextw-1+1;     

8、;       printf("申请成功!第%d名哲学家再拿起右边一支编号为%d筷子,开开心心的吃饭啦!n",nextw,in);                   else printf("申请失败!第%d名哲学家只有一支筷子,只好干巴巴的盼着旁边的那位哲学家赶快吃完。n",nextw);   

9、       else printf("申请失败!第%d名哲学家没有拿到筷子,只好干巴巴的等着旁边的那位哲学家赶快吃完。n",nextw);void Dropchopstick(int nextr)/放下筷子函数。 / nextr为放下筷子的哲学家的编号     if(Readcountnextr-1!=0)/判断筷子是否已经占用              if(Re

10、adcountnextr-1=2)                       printf("该名哲学家吃饱啦!准备放下筷子。n");             chopsticknextr-1=0;     

11、        chopsticknextr=0;             printf("该名哲学家已经放下筷子。n");                  else      

12、        printf("该名哲学家只有一支筷子!又不能吃饭,只好准备放下筷子。n");              chopsticknextr-1=0;              printf("该名哲学家已经放下筷子。n"

13、;);              else printf("该名哲学家没有筷子你还让他放下。你好可恶啊,鄙视一下n");int select()int i,nextw,nextr;printf("请输入编号:n1-拿筷子过程n2-放筷子过程n3-退出n");scanf("%d",&i);switch(i)case 1:     printf("现在进行哲学家拿

14、筷子过程,请输入要申请筷子的哲学家编号(1-5)。n");     scanf("%d",&nextw);     if(nextw>0)&&(nextw<6)          Getchopstick(nextw);/拿筷子过程          else printf("输入超

15、出范围,请重新输入!");     break;case 2:printf("现在进行哲学家放筷子过程,请输入要放筷子的哲学家编号(1-5)。n");     scanf("%d",&nextr);     if(nextr>0)&&(nextr<6)          Dropchopstick(nextr);

16、/放筷子过程          else printf("输入超出范围,请重新输入!n");break;case 3:return(0);default:printf("输入超出范围,请重新输入.n");     scanf("%d",&i);return(1);int main()/主函数操作    printf("哲学家就餐问题。n规则:每个人只有申请到了左边的筷子

17、才可以申请右边的筷子。n");    for(int m=0;m<n;m+)            chopstickm=0;        for(int c=0;c<n;c+)        Readcountc=0;        int i;prin

18、tf("请输入编号:n1-拿放筷子操作n2-退出n");scanf("%d",&i);while(i!=2)select();printf("n");printf("请输入编号:n1-拿放筷子操作n2-退出n");printf("n");scanf("%d",&i);return(1);6 调试分析实验调试过程中遇到的问题:起初认为这个设计题目还是比较简单的,但实验中还是遇到很多问题,容易绕弯路,实验要求用语言编程实现P、V原语并用P、V原语哲学家就餐问题:为每个哲学家各编一段程序描述他们的行为,试用P、V操作实现。特别是实现“阻塞”和“唤醒”功能过程中,频繁出错。后来尝试添加chopstickn;/筷子状态标志,解决了不能直观了解筷子状态这个问题。7 测试结果源程序算法选择界面运行结果:拿筷子操作:放筷子操作:拿筷子失败:放筷子失败:退出:参考文献1任满杰等,操作系统原理实用教程, 电子工业出版社 , 2006 3汤子瀛 汤

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论