当前位置:  技术问答>linux和unix

〖高分求解〗★★★★★【C或C++, 来模拟 5位 哲学家进餐的问题。】★★★★★〖up有分〗

    来源: 互联网  发布时间:2016-01-02

    本文导语:  C或C++, 来模拟 5位 哲学家进餐的问题: 为每个哲学家使用POSIX线程(pthread)建立独立的线程(有独立的id),用互斥(叉子其他哲学家使用时,另一个哲学家不能使用)和条件(哲学家饿了才尝试去得到叉子,得到相邻的左右两把叉...



C或C++, 来模拟 5位 哲学家进餐的问题:

为每个哲学家使用POSIX线程(pthread)建立独立的线程(有独立的id),用互斥(叉子其他哲学家使用时,另一个哲学家不能使用)和条件(哲学家饿了才尝试去得到叉子,得到相邻的左右两把叉子才能进餐)来分到叉子。



关键事件:

1. 哲学家饿了就要尝试去得到叉子。
2. 哲学家得到相邻的左右两把叉子才可以进餐
3. 吃完了就要释放两把叉子

每个事件发生就打印一行。并用gettimeofday()显示毫秒 。

A. 用'X' 表示哲学家在进餐
B. 用'O' 表示哲学家在思考
C. 用'!' 表示哲学家饿了

例子:
                1    2    3    4    5
        0 ms:   O    O    O    O    O
       95 ms:   !    O    O    O    O
       95 ms:   X    O    O    O    O
      214 ms:   X    O    O    O    !
      327 ms:   X    O    O    !    !
      328 ms:   X    O    O    X    !
      444 ms:   O    !    O    O    !
      444 ms:   O    X    O    O    X

(注意:肯定不会有两个X出现在相邻的列中)

程序在运行“50次成功进餐”发生后停止。
哲学家在“进餐”和“思考”的“时间周期”是一个0.1到0.5之间的随机数字。
5个哲学家都从思考开始。
可以考虑使用usleep()
还可以使用旗语(semaphore)的 P() 和 V()来解决互斥、

 
万分感激。。。。。。。。。。。。。。。。。。。。。。。

|
贴一个,不过不能模拟死锁

#include 
#include 
#include 

enum PhState{Thinking=0,Waiting,Eating}; //哲学家状态
int stick[5]; //筷子状态,1表示使用,0表示空闲
PhState phstate[5]; //哲学家状态
int timerforPh[5]; // 定时器,确定状态变化的时刻
const int SPAN = 91; //定义思考和进食的最长时间
//模拟当i饥饿时,采用的策略。
void hungry(int i)
{
int left = (i)%5;
int right = (i+1)%5;
if(stick[left]==0 && stick[right]==0)
{
stick[left]=stick[right]=1;
phstate[i]=Eating;
timerforPh[i]=rand()%SPAN+1; //设置吃饭时间
}
else
{
phstate[i]=Waiting;
}
}
//从等待中唤醒
void wakeup(int i)
{
//唤醒后的操作同思考时饥饿的操作相同
hungry( i);
}
//模拟吃完后的动作
void ate(int i)
{
stick[(i)%5]=0;
stick[(i+1)%5]=0;
//唤醒左右哲学家的顺序可以改成随机的,这里仅仅是固定顺序
if(phstate[(5+i-1)%5]==Waiting)
wakeup((5+i-1)%5);
if(phstate[(i+1)%5]==Waiting)
wakeup((i+1)%5);
phstate[i]=Thinking;
timerforPh[i]=rand()%SPAN+1; //设置思考时间
}

//输出当前状态,参数为当前时间
void print_state(int cur_time)
{
char state_ch[]={'0','!','X'};
cout.width(4);
cout

    
 
 

您可能感兴趣的文章:

  • 高分求解---如何在DOS下查杀欢乐时光病毒?用哪种杀毒软件?Windows98没法进入了!
  • 简单问题,高分求解
  • 各位大侠,高分求解
  • 高分求解,一定给分!!!!
  • 高分求解jbuilder5 运行自带的jsp范例出错的问题?
  • 高分求解,不够再加
  • ################高分求解!!!!,关注有分!!!!
  • 哪里能够下载到针对InterBase的第三类的JDBC驱动程序InterClient?高分求解......
  • jsp 里面的 特殊字符“单引号”“双引号”的替换??(高分求解)
  • linux上的媒体播放(高分在线求解)
  • 调试JSP遇到的问题,高分求解
  • 高分求解:win2000访问linux
  • 高分求解 - TOMCAT中的内存泄漏问题……
  • 通讯行业里的OSS(网管)系统是什么样系统啊?干什么用的?高分求解
  • 急急急!!!高分求解linux 2.6 内核安装网卡的问题
  • 【NFS问题暴高分求解】如何知道Server端有哪些目录共享?
  • 高分求解,信号捕获
  • 三个容易bash脚本,高分求解
  • 高分求解?????一定给分
  • 从交换机分出来的机器的ip地址问题(高分求解)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 高分求助高分求助高分求助高分求助高分求助高分求助
  • 谁参加过weblogic的证书考试,是否有经验可供参考?高分高分高高分
  • 哪里有JB6下载啊,高分相送,救命
  • 高分求救!我在uclinux上运行应用程序时出现内存分配错误,不知如何解决,解决者高分!!
  • 哪里去找中文的EJB文章?高分悬赏!
  • 有jsp的upload和download 代码么,高分相报!
  • (高分求助)请问,那里有软件开发的<设计文档>
  • 高分寻求jsp代码(网上调查系统,新闻发布系统)就这点分了
  • 高分求购做饼图、线形图的源吗?
  • 关于linu下的中文输入.(高分:300)
  • 一个简单的问题,高分求助!!!
  • 高分求购jbulider6得注册码,企业版本,个人版本都要
  • Linux远程访问的问题,高分求教:)
  • 请问哪儿有Solaris8的光盘映像文件下载???高分相赠!!!
  • 高分求“Ration Rose”&"JBuilder6.0"&"VisualCafe"
  • VJ的一个问题,高分求助,熟悉VJ得请进!
  • 高分求购:linux和unix命令大全电子文档
  • 急救:关于BLOB数据类型---在线等待,高分相送!
  • 求UNIXWARE7.11的原版下载,高分相赠,在线等待!!!
  • 关于java?高分相送!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3