您好,欢迎光临本网站![请登录][注册会员]  
文件名称: 操作系统课设-哲学家就餐
  所属分类: 网络攻防
  开发工具:
  文件大小: 577kb
  下载次数: 0
  上传时间: 2009-12-17
  提 供 者: guoguo******
 详细说明: 在程序中,首先给哲学家用到的5根筷子做标记,用bool型表示,其中true表示筷子未使用,false表示筷子被占用,将筷子的状态存储到数组kuaizi[5]中,在整个程序中需定义一个类man,里面设有的私有成员变量为status和number,status标记当前哲学家的状态,0表示正在等待(即处于饥饿状态),1表示得到两支筷子正在吃饭,2表示正在思考。在初始状态下,假设5个哲学家都在思考,思考的下一个状态就为饥饿。在分析哲学家的状态时,当处于饥饿状态时,根据资源不发生死锁的条件,要对哲学家左右两边筷子的状态进行分析,因此要分别用到lefthand和righthand来标记每个哲学家左右两边筷子的状态,true表示筷子未使用,false表示筷子被使用。在类中设有的公有的成员函数为man(),为了避免出现死锁,这里设所有哲学家都从一边开始找筷子,在man()函数中定义了左筷子未使用,右筷子已使用,哲学家的状态为思考,对资源分配进行初始化设计。在类中还定义了一个成员函数change(),它主要是判断每一轮哲学家的就餐问题时,对资源分配情况的分析,即解决方案。这是整个程序的关键,在每个进程运行的过程中,都要避免死锁的发生,涉及到进程的概念就离不开临界区,只有 进入临界区,才能运用某一段进程运行的代码,给哲学家进行就餐问题的解决。在程序中需引入进入临界区的代码EnterCriticalSection (&cs)。解决的思路为:起初阶段,给编号为1的筷子进行初始化,让它的状态是未使用,而对于1号筷子做为左边的哲学家,他的右边的筷子就为5号,让这支筷子的状态也是未使用,这样该哲学家就可以吃饭,而后就要定义他的下一个状态为思考,这个阶段为第一轮的解决方案,这两支筷子就变为了已使用的状态,在下一轮哲学家就餐问题的分析中就要省略掉这两支已使用的筷子,在剩下的三支筷子中进行抉择,但是抉择的方法必须是保证左右两边的筷子都是未使用的,由于每次进餐状况至多是两个哲学家就餐,在剩下的三支筷子中,有四个哲学家都处于饥饿的状态,而只有两名哲学家左右两边的筷子符合都处于未使用的状态。这样就可以随机选择一名哲学家进餐,并把他的下一个状态变为思考,而他左右的筷子也要变成已使用状态,在这里接触到了随机的概念,我引用了srand(time(NULL)*1000)函数,它表示以千分之一秒做为配置随机数的种子。在以后的轮次中,只要根据上一轮已使用的两支筷子,在剩下的三支筷子中进行哲学家的抉择,只要保证左右两边都在上一轮中未使用即可,与此同时还要判断哲学家是否为饥饿状态,哲学家只有在饥饿状态时他的下一个状态才能就餐,就餐后要变为思考,然后是饥饿… ...展开收缩
(系统自动生成,下载前可以参看下载内容)

下载文件列表

相关说明

  • 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
  • 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度
  • 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
  • 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
  • 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
  • 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.
 相关搜索: 操作系统
 输入关键字,在本站1000多万海量源码库中尽情搜索: