⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 文本文档.txt.txt

📁 哲学家进餐算法 一定要成为vip会员,十万火急 站长请通融一下,
💻 TXT
字号:
define  N  5
 void philosopher (int i)  
{
    while (true)  
   {
    思考;
    取fork[i]; 取fork[(i+1) % 5];
    进食;
    放fork[i]; 放fork[(i+1) % 5];
    }
}
为防止死锁发生可采取的措施:
最多允许4个哲学家同时坐在桌子周围仅当一个哲学家左右两边的筷子都可用时,才允许他拿筷子()给所有哲学家编号,奇数号的哲学家必须首先拿左边的筷子,偶数号的哲学家则反之 为了避免死锁,把哲学家分为三种状态,思考,饥饿,进食,并且一次拿到两只筷子,否则不拿.

 

哲学家就餐问题解法(1)
#define  N  5
 void philosopher (int i)  
{
    while (true)  
   {
    思考;
    取fork[i]; 取fork[(i+1) % 5];
    进食;
    放fork[i]; 放fork[(i+1) % 5];
    }
}
哲学家就餐问题解法(2)
#define  N  5
#define  THINKING  0
#define  HUNGRY    1
#define  EATING    2
#typedef  int semaphore;
int state[N];
semaphore mutex=1;
semaphore s[N];
void test(int i)
{
      if (state[ i ] == HUNGRY) 
          && (state [ (i-1) % 5] != EATING) 
          && (state [ (i+1) % 5] != EATING)
          {
               state[ i ] = EATING;
               V(&s[ i ]);
           }
 }
void  philosopher (int i) 
{   while (true)  
     {
      思考;
       P(&mutex);
       state[i] = HUNGRY;
       test(i);
       V(&mutex);
       P(&s[i]);
      拿左筷子;
      拿右筷子;
       进食;
      放左筷子;
; 放右筷子;
        P(&mutex)
        state[ i ] = THINKING;
        test([i-1] % 5);
        test([i+1] % 5);
        V(&mutex);
        }
}
state[ i ] = THINKING
s[ i ] = 0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -