| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY 
共有 894 人关注过本帖
标题:请教哲学家进餐问题
收藏  订阅  推荐  打印 
lw8484654
Rank: 3Rank: 3
等级:中级会员
帖子:223
积分:2386
注册:2005-12-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-3-17 22:18
nuciewth
Rank: 12Rank: 12Rank: 12
来自:我爱龙龙
等级:版主
威望:93
帖子:9521
积分:95068
注册:2006-5-23

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


倚天照海花无数,流水高山心自知。
2007-3-18 11:32
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.044678 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved