在c/c 论坛里看到有网友贴出来,这里做一下备份,以后有时间尝试一下能否用信号量和共享内存机制把程式编出来

#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
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!