当前位置: 技术问答>linux和unix
操作系统:哲学家吃饭问题.关于Linux/Unix.
来源: 互联网 发布时间:2016-02-28
本文导语: 问题描述: 一个房间内有5个哲学家,他们的生活就是思考和进食。哲学家思考后,过一定的时间就会饥饿,饥饿之后就想吃饭,吃饭后再思考。房间里有一张圆桌,桌子周围放有五把椅子,分别属于五位哲学家每...
问题描述:
一个房间内有5个哲学家,他们的生活就是思考和进食。哲学家思考后,过一定的时间就会饥饿,饥饿之后就想吃饭,吃饭后再思考。房间里有一张圆桌,桌子周围放有五把椅子,分别属于五位哲学家每两位哲学家之间有一把叉子,哲学家进食时必须同时使用左右两把叉子。
问题:
1、 写出哲学家进餐的伪码。
2、 用C程序实现哲学家进餐。(注:可以使用共享变量的方式,也可以使用信号量的方式来实现)
请问怎么做啊 谢谢
一个房间内有5个哲学家,他们的生活就是思考和进食。哲学家思考后,过一定的时间就会饥饿,饥饿之后就想吃饭,吃饭后再思考。房间里有一张圆桌,桌子周围放有五把椅子,分别属于五位哲学家每两位哲学家之间有一把叉子,哲学家进食时必须同时使用左右两把叉子。
问题:
1、 写出哲学家进餐的伪码。
2、 用C程序实现哲学家进餐。(注:可以使用共享变量的方式,也可以使用信号量的方式来实现)
请问怎么做啊 谢谢
|
#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
#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])
}
}
|
这个问题在《windows核心编程》里有详细描述,主要是用来描述死锁的产生,和WaitForMultiObject函数的应用。OS不同,原理一样。
|
就是互斥锁的问题
|
一个互斥环的问题
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。