作业帮 > 综合 > 作业

哲学家吃饭问题*设有5个哲学家,共享一张放有5把椅子的桌子,每人分得一把椅子,*但是,桌子上共有5只筷子,在每人两边各放

来源:学生作业帮 编辑:百度作业网作业帮 分类:综合作业 时间:2024/06/25 05:11:50
哲学家吃饭问题
*设有5个哲学家,共享一张放有5把椅子的桌子,每人分得一把椅子,
*但是,桌子上共有5只筷子,在每人两边各放一只,哲学家们在肚子饥饿
*时才试图分两次从两边拿起筷子就餐.
*条件:
*1)拿到两只筷子时哲学家才开始吃饭.
*2)如果筷子已在他人手上,则该哲学家必须等他人吃完之后才能拿到筷子.
*3)任一哲学家在自己未拿到两只筷子前却不放下自己手中的筷子.
*要求:
*1)描述一 个保证不会出现两个邻座同时要求吃饭的通信算法.
*2)描述一个即没有两个邻座同时吃饭,有没有饿死(永远拿不到筷子)的算法
哲学家吃饭问题*设有5个哲学家,共享一张放有5把椅子的桌子,每人分得一把椅子,*但是,桌子上共有5只筷子,在每人两边各放
#include
#include
#define people 5
#define meat 10 //肉块的数量
static int Tman[people];
int n = 1; //定义n为共吃肉的数量
/////////////////////定义一些需要跟哲学家对应的数组///////////////////////
static int Thinking[people]; //第n个哲学家在思考.如果为1就是真,0就假s
static int Eating[people]; //第n个哲学家在吃.1为真,0为假
static int EatTimeAll[people];
static int EatTime[people];
static int MeatNo[people];
int getkey(int i)
{
//key();
if(i!=1)
{
if(i%2 != 0) //奇数就从左手开始拿筷子,然后再到右手.
{
if(Tman[i-1] == 0) //i-1为第i个哲学家的左边的筷子0表示该筷子可用,1表示正在被用
{
Tman[i-1] = 1;
if(Tman[i] == 0)
{
Tman[i] = 1;
return 1;
}
else
{
Tman[i-1] = 0;
return 0;
}
}
else
{
return 0;
}
}
else //偶数先从右手开始拿筷子.
{
if(Tman[i] == 0) //i-1为第i个哲学家的左边的筷子0表示该筷子可用,1表示正在被用
{
Tman[i] = 1;
if(Tman[i - 1] == 0)
{
Tman[i - 1] = 1;
return 1;
}
else
{
Tman[i] = 0;
return 0;
}
}
else
{
return 0;
}
}
}
else
{
if(Tman[5] == 0)
{
Tman[5] = 1;
if(Tman[1] == 0)
{
Tman[1] = 1;
return 1;
}
else
{
Tman[5] = 0;
return 0;
}
}
else
{
return 0;
}
}
}
void eat() //n表示要吃的第n块肉
{
int i;
for(i=1;i
哲学家吃饭问题*设有5个哲学家,共享一张放有5把椅子的桌子,每人分得一把椅子,*但是,桌子上共有5只筷子,在每人两边各放 五个哲学家吃饭设有5个哲学家,共享一张放有五把椅子的桌子,每人分得一把椅子.但是,桌子上总共有5支筷子,在每人两边分开各 一张桌子比一张椅子贵120元,一把椅子的价钱是一张桌子的5分之一,一张桌子和一把椅子各多少元? 5张桌子和8把椅子共花了1000元,5张桌子比8把椅子贵200元,一张桌子,一把椅子各多少钱? 一张桌子的价钱是一把椅子的2倍,买5张桌子和6把椅子一共用848元,一张桌子和一把椅子各多少元? 一把椅子和一张桌子价钱的比是3:5,桌子和椅子的单价各是多少元? 一张桌子800元,是椅子价格的5倍,一把椅子多少元?买这样一套桌椅需要多少钱?(一张桌子配4把椅子) 5张桌子和18把椅子的总价是396元,已知一张桌子的价钱相当于3把椅子的价钱.一张桌子、椅子各多少钱? 某学校购买了4张桌子和5把椅子共花去230元已一张桌子比一把椅子贵8元.桌子和椅子的单价各是多少 有10套桌椅3个老师每人搬一张桌子,每两人同学抬一张桌子,一个人搬一把椅子,共需多少个同学帮忙 一张桌子比一把椅子贵70.8元,每把椅子的单价是每张桌子的5分之3,每张桌子多少元?每把椅子多少元? 一把椅子和两张桌子105元,两把椅子一张桌子90元,椅子桌子各多少元