标题:请教哲学家进餐问题
只看楼主
lw8484654
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-12-1
 问题点数:0 回复次数:1 
请教哲学家进餐问题

问题:
有五个哲学家,
每个哲学家面前有一盘面
每个哲学家左右各有一只筷子
哲学家有2个状态,思考或者拿起筷子吃饭。
如果哲学家拿到一只筷子,不能吃饭,拿到2只才能吃饭。
书上代码:
#define N 5
#define Left (i+N-1)%N
#define Right (i+1)%N
#define THINKING 0
#define HUNGRY 1
#define EATING 2
typedef int semaphore;
int state(N);
semapore mutex =1;
semaphore s(N);

void philosopher(int i){
while(TRUE){
think();
take_forks(i);
eat();
put_forks(i);
}
}
void tak_forks(int i){
down(&mutex);
state(i)=HUNGRY;
test(i);
up(&mutex);
down(&s[i]);
}
void put_forks(int i){
down(&mutex);
state(i)=THINK;
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])
}
}
我有一个地方搞不清楚,就是
#define Left (i+N-1)%N
#define Right (i+1)%N
这里的i肯定是第i个哲学家,估计是随机的吧,怎么能定义为常量呢?
请高手指教下!!!

搜索更多相关主题的帖子: 哲学家 进餐 
2007-03-17 22:18
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
得分:0 

宏定义是字符串的替换,没有任何真正的本意可言.


倚天照海花无数,流水高山心自知。
2007-03-18 11:32



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-124885-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.064422 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved