資源簡介
這是關(guān)于銀行家算法的linux下實(shí)現(xiàn)的代碼,由于技術(shù)有限,其中若有bug,可與本人聯(lián)系,yym112358@163.com
代碼片段和文件信息
#include
#include
#include
#include?
#include
#include
#define?True?1
#define?False?0
pthread_mutex_t?mutex;
int?Finish[5]?=?{False};
int?allocation[5][3]?=?{010302302211002};
int?need[5][3]?=?{743020600011431};
int?available[3]?=?{230};
int?work[3];
void?copy()
{
int?i;
for(i?=?0;i<3;i++)
work[i]=?available[i];
}
int?term(int?i)
{
int?j;
for(j?=?0;j<3;j++)
if(need[i][j]>work[j])
return?False;
return?True;
}
int?term1()
{
int?i;
int?j;
for(i?=?0;i<5;i++)
{
if((Finish[i]?==?0)?&&?(term(i)?==?1))
return?i;
}
return?5;
}
void?term2(int?i)
{
int?j;
for(j?=?0;j<3;j++)
work[j]?=?work[j]?+?allocation[i][j];
Finish[i]?=?True;
}
int?term3()
{
int?i;
for(i?=?0;i<5;i++)
{
if(Finish[i]?==?0)
{
return?False;
}
}
return?True;
}
int?IsSafe()
{
copy();
int?i;
for(i?=?0;i<5;i++)
{
if(term1()!=5)
{
term2(term1());
}
?else?if(term1()?==?5)
{
int?m?=?term3();
if(m?==?1)
return?True;
else
return?False;
}
}
if(term1()?==?5)
{
int?m?=?term3();
if(m?==?1)
return?True;
else
return?False;
}
}
int??condition1(int?*request)
{
int?i;
for(i?=?1;i<4;i++)
{
if(request[i]>need[request[0]][i-1])
{
printf(“%s%d?%d:?%d?%s%d?%d:?%d?\n““request“request[0]irequest[i]“>?need“request[0]ineed[request[0]][i]);
return?False;
}
}
return?True;
}
int?condition2(int?*request)
{
int?i;
for(i?=?1;i<4;i++)
{
if(request[i]>available[i-1])
{
printf(“%s%d?%d:?%d?%s%d:?%d?\n““request“request[0]irequest[i]“>?available?“iavailable[i-1]);
return?False;
}
}
return?True;
}
void?*runner(void?*param)
{
pthread_mutex_lock(&mutex);
int?*request?=?(int?*)param;
if(condition1(request)?==?0)
{
printf(“%s%d:““request“request[0]);
int?j;
for(j?=?0;j<3;j++)
printf(“?%d?“request[j+1]);
printf(“?denied?
評論
共有 條評論