操作系统银行家算法实验报告_(1) 下载本文

回false,并输出不安全的提示;

bool safety(int iAllocation[N][M],int iNeed[N][M],int iAvailable[M],char cName[N]) {

int i,j,flag,x=0; char num[5]; int Work[M];

bool Finish[N]; //定义基本变量 for(j=0;j<3;j++) Work[j]=iAvailable[j]; //将iAvailable的值赋给Work for(i=0;i<5;i++) //将Finish全部置为False Finish[i]=false;

while(true) //执行无限循环,满足条件时跳出 { flag=0; //每次循环开始时将记录本次循环中是否有使有满足条件iAllocation的标志置为0,若为0表示不存在,若不为0表示存在 for(i=0;i<5;i++) //执行循环,看有没有满足条件的iAllocation {

if(Finish[i]==false&&Work[0]>=iNeed[i][0]&&Work[1]>=iNeed[i][1]&&Work[2]>=iNeed[i][2]) { for(j=0;j<3;j++) { Work[j]+= iAllocation[i][j] ; //Work[j]+= Work[j]+iAllocation[i][j] } Finish[i]=true; //将 Finish置true flag++; //标志加1 num[x++]=cName[i]; //将该序列名赋给数组num[] } } if(flag==0) { cout<<\无安全序列\ //标志为0,证明已无满足条件iAllocation ,退出循环,返回false return false; }

if(Finish[0]==true&&Finish[1]==true&&Finish[2]==true&&Finish[3]==true&&

6

Finish[4]==true) //若所有Finish置为true,输出安全数列,返回True { cout<<\ cout<<\安全序列为:\ for(x=0;x<5;x++) cout<

return true; }

//安全返回true,不安全返回false

bool banker(int iAllocation[N][M],int iNeed[N][M],int iAvailable[M],char cName[N]) {

int iMax[N][M]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}}; int t,i,Request[3],check_1[3];

char x; //定义变量

cout<<\请输入进程名:\ //输入进程名 cin>>x;

if(x=='a')i=0; if(x=='b')i=1; if(x=='c')i=2; if(x=='d')i=3; if(x=='e')i=4;

cout<<\请输入各资源数量:\ //输入变量名 for(t=0;t<3;t++) cin>>Request[t];

for(t=0;t<3;t++) //检查数值 { check_1[t]=Request[t]+iAllocation[i][t]; }

for(t=0;t<3;t++) {

if((iMax[i][t]-check_1[t])<0) {

cout<<\资源申请超过最大需求量!!!\\n\ return false; } }

7

for(t=0;t<3;t++) //检查数值 {

if((iAvailable[t]-Request[t])<0) {

cout<<\不能满足进程!!!\\n\ return false; } }

for(t=0;t<3;t++) //将该变量的 iAvailable、iAllocation、iNeed重新赋值 {

iAvailable[t]-=Request[t]; iAllocation[i][t]+=Request[t]; iNeed[i][t]-=Request[t]; }

safety(iAllocation,iNeed,iAvailable,cName); //执行安全数列算法 return true; return true; }

实验结果

【实验小结】

通过这次实验,让我更深的了解了银行家算法,银行家算法是避免死锁的主要方法,其思路在很多方面都非常值得我们来学习借鉴。

8

9