五个哲学家吃饭设有5个哲学家,共享一张放有五把椅子的桌子,每人分得一把椅子.但是,桌子上总共有5支筷子,在每人两边分开各
来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/07/28 08:15:00
五个哲学家吃饭
设有5个哲学家,共享一张放有五把椅子的桌子,每人分得一把椅子.但是,桌子上总共有5支筷子,在每人两边分开各放一致.哲学家们在肚子饥饿时才试图分两次从两边拾起筷子就餐.条件:(1)只有拿到两支筷子时,哲学家才会吃饭.(2)如果筷子已在他人手中,则该哲学家必须等待到他人吃完后才能拿到筷子.(3)任一哲学家在自己未拿到两支筷子吃饭之前,决不放下自己手中的筷子.试描述一个既没有两邻座同时吃饭,又没有人饿死(永远拿不到筷子)的算法.
设有5个哲学家,共享一张放有五把椅子的桌子,每人分得一把椅子.但是,桌子上总共有5支筷子,在每人两边分开各放一致.哲学家们在肚子饥饿时才试图分两次从两边拾起筷子就餐.条件:(1)只有拿到两支筷子时,哲学家才会吃饭.(2)如果筷子已在他人手中,则该哲学家必须等待到他人吃完后才能拿到筷子.(3)任一哲学家在自己未拿到两支筷子吃饭之前,决不放下自己手中的筷子.试描述一个既没有两邻座同时吃饭,又没有人饿死(永远拿不到筷子)的算法.
![五个哲学家吃饭设有5个哲学家,共享一张放有五把椅子的桌子,每人分得一把椅子.但是,桌子上总共有5支筷子,在每人两边分开各](/uploads/image/z/1543169-65-9.jpg?t=%E4%BA%94%E4%B8%AA%E5%93%B2%E5%AD%A6%E5%AE%B6%E5%90%83%E9%A5%AD%E8%AE%BE%E6%9C%895%E4%B8%AA%E5%93%B2%E5%AD%A6%E5%AE%B6%2C%E5%85%B1%E4%BA%AB%E4%B8%80%E5%BC%A0%E6%94%BE%E6%9C%89%E4%BA%94%E6%8A%8A%E6%A4%85%E5%AD%90%E7%9A%84%E6%A1%8C%E5%AD%90%2C%E6%AF%8F%E4%BA%BA%E5%88%86%E5%BE%97%E4%B8%80%E6%8A%8A%E6%A4%85%E5%AD%90.%E4%BD%86%E6%98%AF%2C%E6%A1%8C%E5%AD%90%E4%B8%8A%E6%80%BB%E5%85%B1%E6%9C%895%E6%94%AF%E7%AD%B7%E5%AD%90%2C%E5%9C%A8%E6%AF%8F%E4%BA%BA%E4%B8%A4%E8%BE%B9%E5%88%86%E5%BC%80%E5%90%84)
哲学家就餐问题解法(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了……
#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只筷子,在每人两边各放
一张桌子比一张椅子贵120元,一把椅子的价钱是一张桌子的5分之一,一张桌子和一把椅子各多少元?
5张桌子和8把椅子共花了1000元,5张桌子比8把椅子贵200元,一张桌子,一把椅子各多少钱?
一张桌子的价钱是一把椅子的2倍,买5张桌子和6把椅子一共用848元,一张桌子和一把椅子各多少元?
有10套桌椅3个老师每人搬一张桌子,每两人同学抬一张桌子,一个人搬一把椅子,共需多少个同学帮忙
一把椅子和一张桌子价钱的比是3:5,桌子和椅子的单价各是多少元?
一张桌子800元,是椅子价格的5倍,一把椅子多少元?买这样一套桌椅需要多少钱?(一张桌子配4把椅子)
5张桌子和18把椅子的总价是396元,已知一张桌子的价钱相当于3把椅子的价钱.一张桌子、椅子各多少钱?
一把椅子和两张桌子105元,两把椅子一张桌子90元,椅子桌子各多少元
某学校购买了4张桌子和5把椅子共花去230元已一张桌子比一把椅子贵8元.桌子和椅子的单价各是多少
某车间有工人100名,每人每天加工桌子18张或椅子24把,要使每天加工的桌子和椅子配套(一张桌子配两把椅子),应如何分配