#define N 5
#define LEFT (i-1)%N
#define RIGHT (i 1)%N
#define THINKING 0
#define HUNGRY 1
#define EATING 2
int state[N];
void philosopher(int i)
{
while(TRUE)
{
think();
take_forks();
eat();
put_forks(i);
}
}
void take_forks(int i)
{
down(&mutex);
state[i]=HUNGRY;
test(i);
up(&mutex);
down(&s[i]);
}
void put_forks(int i)
{
down(&mutex);
state[i]=THINKING;
test(LEFT);
test(RIGHT);
up(&mutex);
}
void test(i)
{
if(state[i]==HUNGRY && state[LEFT]!=EATING && state[RIGHT]!=EATING)
{
state[i]=EATING;
up(&s[i]);
}
}
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




