大家好,如果您还对银行家算法c不太了解,没有关系,今天就由本站为大家分享银行家算法c的知识,包括银行家算法c++代码的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!
银行家算法C++描述
#include iostream
#include string
#define M 3 //资源的种类数
#define N 5 //进程的个数
void output(int iMax[N][M],int iAllocation[N][M],int iNeed[N][M],int iAvailable[M],char cName[N]); //统一的输出格式
bool safety(int iAllocation[N][M],int iNeed[N][M],int iAvailable[M],char cName[N]);
bool banker(int iAllocation[N][M],int iNeed[N][M],int iAvailable[M],char cName[N]);
int main()
{
int i,j;
//败纳春当前可用每类资源的资源数
int iAvailable[M]={3,3,2};
//系统中N个进程中的每一个进程对M类资源的最大需求
int iMax[N][M]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};
//iNeed[N][M]每一个进程尚需的各类资源数
//iAllocation[N][M]为系统中每一类资源当前已分配给每一进程的资源数
int iNeed[N][M],iAllocation[N][M]={{0,1,1},{2,0,0},{3,0,2},{2,1,1},{0,0,2}};
//进程名
char cName[N]={'a','b','c','d','e'};
bool bExitFlag=true; //退出标记
char ch; //接收选择是否继续提出申请时传进来的值
bool bSafe; //存放安全与否的标志
//计算iNeed[N][M]的值
for(i=0;iN;i++)
for(j=0;jM;j++)
iNeed[i][j]=iMax[i][j]-iAllocation[i][j];
//输出初始值
output(iMax,iAllocation,iNeed,iAvailable,cName);
//判断当前状态是否安全
bSafe=safety(iAllocation,iNeed,iAvailable,cName);
//是否继续提出申请
while(bExitFlag)
{
cout"n""继续提出申请?ny为是;n为否。n";
cinch;
switch(ch)
{
case 'y':
//cout"调用银行家算法";
bSafe=banker(iAllocation,iNeed,iAvailable,cName);
if (bSafe) //安全,则输出变化后的数据
output(iMax,iAllocation,iNeed,iAvailable,cName);
break;
case 'n':
cout"退出。n";
bExitFlag=false;
break;
default:
cout"输入有误,请重新输入:n";
}
}
}
//输出
void output(int iMax[N][M],int iAllocation[N][M],int iNeed[N][M],int iAvailable[M],char cName[N])
{
int i,j;
cout"nt Max tAllocationt Need t Available"endl;
cout"tA B CtA B CtA B Ct A B C"endl;
for(i=0;iN;i++)
{
coutcName[i]"t";
for(j=0;jM;j++)
coutiMax[i][j]" ";
cout"t";
for(j=0;jM;j++)
coutiAllocation[i][j]" ";
cout"t";
for(j=0;jM;j++)
coutiNeed[i][j]" ";
cout"t";
cout茄困" ";
//Available只需要输出一次
if (i==0)
for(j=0;jM;j++)
coutiAvailable[j]" ";
coutendl;
}
}
//安全性算法,进行安全性检查;安全返回true,并察耐且输出安全序列,不安全返回false,并输出不安全的提示;
bool safety(int iAllocation[N][M],int iNeed[N][M],int iAvailable[M],char cName[N])
{
}
//定位ch对应的进程名在数组中的位置
//没找见返回-1,否则返回数组下标
int locate(char cName[N],char ch)
{
int i;
for(i=0;iN;i++)
if (cName[i]==ch) //找到
return i;
//未找到
return -1;
}
//提出申请,返回提出申请的进程名对应的下标
int request(char cName[N],int iRequest[M])
{
int i,loc;
char ch;
bool bFlag=true;
//判断输入的进程名是否有误
while(bFlag)
{
//输出进程名
for(i=0;iN;i++)
coutcName[i]"t";
//输入提出申请的进程名
cout"n输入提出资源申请的进程名:n";
cinch;
//定位ch对应的进程名在进程名数组中的位置
loc=locate(cName,ch);
//没找到,重新输入
if (loc==-1)
cout"n您输入的进程名有误!请重新输入";
//找到,退出循环
else
bFlag=false;
}
//输入提出申请的资源数
cout"输入申请各类资源的数量:n";
for(i=0;iM;i++)
ciniRequest[i];
//返回提出申请的进程名对应的下标
return loc;
}
bool banker(int iAllocation[N][M],int iNeed[N][M],int iAvailable[M],char cName[N])
{
}
这个是c++的 我的报告
银行家算法
Dijkstra(1965)提出了一种能够避免死锁的调度算法,称为银行家算法(banker's algorithm),这是6.4.1节中给出的死锁检测算法的扩展。该模型基于一个小城镇的银行家,他向一群客户分别承诺了一定的贷款额度。算法要做的是判断对请求的满足是禅春否会导致进入不安全状态。如果是,就拒绝请求;如果满足请求后系统仍然是安全的,就予以分配。在图6-11a中我们看到4个客户A、B、C、D,每个客户都被授予顷困一定数量的贷款单位(比如1单位是1千美元),银行家知道不可能所有客户同时都需要最大贷款额,所雀袭念以他只保留10个单位而不是22个单位的资金来为客户服务。这里将客户比作进程,贷款单位比作资源,银行家比作操作系统。
银行家算法的C语言程序
1.根或液据下面兆正给出的系统中资源分配情况,以及各个衫猜物进程的资源申请情况,通过银行家算法来判断各进程的资源请求能否满足(要求记录程序的运行过程)。 已分配的
c语言银行家算法安全性判别
把1作为参数传给yanzheng() yanzheng(int m)
然后验证函拦渗仔数里修改:
work=Avaliable;
i=m;
while(im)
{
if (Finish[i]==falseNeed[i]=work)
{
work=work+Allocation[i];
简汪 Finish[i]=true;
anquan[k]=i;
k++;
i = 0;
}
喊冲 else
i++;
}
好了,文章到此结束,希望可以帮助到大家。