五个哲学家吃饭设有5个哲学家,共享一张放有五把椅子的桌子,每人分得一把椅子.但是,桌子上总共有5支筷子,在每人两边分开各放一致.哲学家们在肚子饥饿时才试图分两次从两边拾起筷子就

来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/25 00:57:08
五个哲学家吃饭设有5个哲学家,共享一张放有五把椅子的桌子,每人分得一把椅子.但是,桌子上总共有5支筷子,在每人两边分开各放一致.哲学家们在肚子饥饿时才试图分两次从两边拾起筷子就五个哲学家吃饭设有5个哲

五个哲学家吃饭设有5个哲学家,共享一张放有五把椅子的桌子,每人分得一把椅子.但是,桌子上总共有5支筷子,在每人两边分开各放一致.哲学家们在肚子饥饿时才试图分两次从两边拾起筷子就
五个哲学家吃饭
设有5个哲学家,共享一张放有五把椅子的桌子,每人分得一把椅子.但是,桌子上总共有5支筷子,在每人两边分开各放一致.哲学家们在肚子饥饿时才试图分两次从两边拾起筷子就餐.条件:(1)只有拿到两支筷子时,哲学家才会吃饭.(2)如果筷子已在他人手中,则该哲学家必须等待到他人吃完后才能拿到筷子.(3)任一哲学家在自己未拿到两支筷子吃饭之前,决不放下自己手中的筷子.试描述一个既没有两邻座同时吃饭,又没有人饿死(永远拿不到筷子)的算法.

五个哲学家吃饭设有5个哲学家,共享一张放有五把椅子的桌子,每人分得一把椅子.但是,桌子上总共有5支筷子,在每人两边分开各放一致.哲学家们在肚子饥饿时才试图分两次从两边拾起筷子就
哲学家就餐问题解法(1)
#define N 5
void philosopher (int i)
{
while (true)
{
思考;
取fork[i]; 取fork[(i+1) % 5];
进食;
放fork[i]; 放fork[(i+1) % 5];
}
}
哲学家就餐问题解法(2)
#define N 5
#define THINKING 0
#define HUNGRY 1
#define EATING 2
#typedef int semaphore;
int state[N];
semaphore mutex=1;
semaphore s[N];
void test(int i)
{
if (state[ i ] == HUNGRY)
&& (state [ (i-1) % 5] != EATING)
&& (state [ (i+1) % 5] != EATING)
{
state[ i ] = EATING;
V(&s[ i ]);
}
}
void philosopher (int i)
{ while (true)
{
思考;
P(&mutex);
state[i] = HUNGRY;
test(i);
V(&mutex);
P(&s[i]);
拿左筷子;
拿右筷子;
进食;
放左筷子;
放右筷子;
P(&mutex)
state[ i ] = THINKING;
test([i-1] % 5);
test([i+1] % 5);
V(&mutex);
}
}
state[ i ] = THINKING
s[ i ] = 0
这是用c语言解决的,我也不明白,是我们老师留的题我上网找到的,看你在问就给你一份,让我解释我也解释不明白.Sorry了……

五个哲学家吃饭设有5个哲学家,共享一张放有五把椅子的桌子,每人分得一把椅子.但是,桌子上总共有5支筷子,在每人两边分开各放一致.哲学家们在肚子饥饿时才试图分两次从两边拾起筷子就 哲学家吃饭问题*设有5个哲学家,共享一张放有5把椅子的桌子,每人分得一把椅子,*但是,桌子上共有5只筷子,在每人两边各放一只,哲学家们在肚子饥饿*时才试图分两次从两边拿起筷子就餐.*条 哲学家靠什么吃饭 哲学家平时靠什么吃饭?..RT 能不能帮我解决六个哲学家进餐问题,就把你的五个哲学家进餐的改改,一个房间内有6位哲学家,他们的生活就是思考和进食.哲学家思考后,过一定的时间就会饥饿,饥饿之后就想吃饭,吃饭后再 哲学家,靠什么吃饭?干什么工作?难道整天吃思想? 哲学家是什么意思 哲学家是什么? 哲学家思想? 哲学家是什么? 我是哲学家 什么是哲学家 做个哲学家需要什么条件? 列举古希腊大哲学家 思想家 10个 当个哲学家是不是挺难的 哲人哲学家靠什么吃饭?哲人哲学家只是随便说说,还能赚到钱,这是为什么? 船夫和哲学家有个船夫在激流中驾驶小船,船上坐着一位哲学家.哲学家问船夫:”船夫回答:“没有.”哲学家说:“那你就失去了生命的一半.”哲学家又问:”船夫回答:“没有.”哲学家 哲学家们靠什么吃饭啊,在古代,他们靠什么吃饭呢?