📄 xx.cpp
字号:
#include <iostream>
using namespace std;
int available[3]={3,3,2};
int max[5][3]={7,5,3,3,2,2,9,0,2,2,2,2,4,3,3};
int allocation[5][3]={0,1,0,2,0,0,3,0,2,2,1,1,0,0,2};
int need[5][3];
int request[5];
int safeArry[5];
//判断是否可以申请
bool isAvailable ()
{
if (request[1]<=need[request[0]][0])
{
if (request[2]<=need[request[0]][1])
{
if(request[3]<=need[request[0]][2])
{
return true;
}
}
}
return false;
};
//判断是否安全
bool isSafe ()
{
if (isAvailable()==true)
{
//用来对Available,allocation,need数组做一个备份
int newAvailable[3];
for (int number1=0;number1<3;number1++)
{
newAvailable[number1]=available[number1];
}
int newAllocation[5][3];
for (int number2=0;number2<5;number2++)
{
for(int number3=0;number3<3;number3++)
{
newAllocation[number2][number3]=allocation[number2][number3];
}
}
int newNeed[5][3];
for (int number4=0;number4<5;number4++)
{
for(int number5=0;number5<3;number5++)
{
newNeed[number4][number5]=need[number4][number5];
}
}
int finish[5]={0,0,0,0,0}; //用来标记所对应的进程是否已经完成
//假设可以分配资源,改变申请成功后个数组的值
for (int tempNumber1=0;tempNumber1<3;tempNumber1++)
{
newAvailable[tempNumber1]=newAvailable[tempNumber1]-request[tempNumber1+1];
newAllocation[request[0]][tempNumber1]=newAllocation[request[0]][tempNumber1]+request[tempNumber1+1];
newNeed[request[0]][tempNumber1]=newNeed[request[0]][tempNumber1]-request[tempNumber1+1];
}
//模拟分配资源
for(int tempNumber=0;tempNumber<5;tempNumber++)
{
//遍历数组,查看是否有可以释放的资源
for(int number=0;number<5;number++)
{
if (!finish[number])
{
//判断第1个资源是否够
if (newNeed[number][0]<=newAvailable[0])
{
//判断第2个资源是否够
if (newNeed[number][1]<=newAvailable[1])
{
//判断第3个资源是否够
if (newNeed[number][2]<=newAvailable[2])
{
//如果资源够,则释放该进程的资源
finish[number]=1;
safeArry[tempNumber]=number;
for (int tempNumber=0;tempNumber<3;tempNumber++)
{
newAvailable[tempNumber] +=newAllocation[number][tempNumber];
//加到安全序列中
}
break;
}
}
}
}
}
}
//判断是否存在安全序列
for (int number=0;number<5;number++)
{
if (!finish[number])
{
return false;
}
}
return true;
}
};
void main()
{
//初始化need数组
for (int number=0;number<5;number++)
{
for (int stypeNumber=0;stypeNumber<3;stypeNumber++)
{
need[number][stypeNumber]=max[number][stypeNumber]-allocation[number][stypeNumber];
}
}
while (true)
{
cout<<"请输入:"<<endl;
cin>>request[0]>>request[1]>>request[2]>>request[3];
//输出各进程所需的资源
cout<<"各进程还需要的资源NEED"<<endl;
for (int k1=0;k1<5;k1++ )
{
cout<<k1<<":";
for(int k3=0;k3<3;k3++)
{
cout<<need[k1][k3]<<" ";
}
cout<<endl;
}
//输出剩余的资源
cout<<"Available:";
for (int k4=0;k4<3;k4++)
{
cout<<available[k4]-request[k4+1]<<" ";
}
cout<<endl;
if (isAvailable())
{
if (isSafe())
{
for (int k4=0;k4<3;k4++)
{
available[k4]-=request[k4+1];
}
cout<<"这样的配置是安全的!";
for (int k2=0;k2<5;k2++)
{
cout<<"->"<<safeArry[k2];
}
} else
{
cout<<"不安全!!!";
}
} else
{
cout<<"资源不够";
}
cout<<endl;
cout<<"有进程发出request请求向量吗?(y/n)";
char a;
cin >>a;
if (a=='n')
{
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -