考研信息网

关于哲学家就餐问题的几段代码

在看哲学家就餐的问题,然后自己综合网上的一些内容写了部分伪代码,  希望大家过来看看讨论一下,错误的地方请指正

哲学家就餐问题
防止饿死出现

算法1: 一次性只准4个哲学家就餐,设置信号量number当第五个哲学家想就餐时,进入等待队列
semaphore number=4;
semaphore chopstic[5]={1,1,1,1,1};

void pilosopher(i)  //第i个哲学家活动的代码,每个哲学家都从自己的左手边筷子开始,然后拿右手的筷子 i从0开始
{
  while(1)
  {
          thinking;
          wait(number);
          wait(chopstic;
          eatting;
          signal(number);
          signal(chopstic[(i+1)%5];
          signal(chopstic={1,1,1,1,1,};
semaphore mutex=1;

void pilosopher(i)
{
while(1)
{
   thinking;
   wait (mutex);
   wait (chopstic);
   signal(mutex);
   eating;
   signal (chopstic[(i+1)%5]);
   signal (chopstic={1,1,1,1,1};
void philosopher(int i)
{
while(1)
{
think();
if(i%2 == 0) //第奇数个哲学家,先左后右。
{
wait (chopstick) ;
eat();
signal (chopstick[(i+1)mod 5]) ;
signal (chopstick) ;
wait (chopstick) ;
signal (chopstick[ i + 1 ] mod 5) ;
}
}

用户名: 查看更多评论

分 值:100分 85分 70分 55分 40分 25分 10分 0分

内 容:

         (注“”为必填内容。)

   与学历史的同仁共勉!!   与学历史的同仁共勉!!下一个

返回前一页

Copyright © 2004-2008 kytk.com. All Rights Reserved.