银行家算法c(银行家算法c++代码)

2023-04-19 20:33:55 生活知识 0阅读 回答者:admin

大家好,如果您还对银行家算法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++;

 }

好了,文章到此结束,希望可以帮助到大家。

免责声明:本文来源网友投稿及网络整合仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。投诉邮箱:1765130767@qq.com。

本文地址:https://www.lnsss.com/shenghuo/zhishi/422169.html