📄 yhj.cpp
字号:
#include <iostream.h>
#define MAX 100
class YHJ
{
int numOfPro;
int numOfTyp;
int Available[MAX];
int Max[MAX][MAX];
int Allocation[MAX][MAX];
int Need[MAX][MAX];
int Save[MAX];
public:
void ProTypInsert()
{
cout<<"请输入系统进程个数:";
cin>>numOfPro;
cout<<"请输入资源类型的种类数:";
cin>>numOfTyp;
}
void Set()
{
int i,j;
for(i=0;i<numOfPro;i++)
{
cout<<"请输入第"<<i<<"号进程现在所分配的各种资源类型的实例数量:";
for(j=0;j<numOfTyp;j++)
cin>>Allocation[i][j];
cout<<"其各资源最大需求为:";
for(j=0;j<numOfTyp;j++)
cin>>Max[i][j];
}
cout<<"请输入各资源现有实例数量:";
for(i=0;i<numOfTyp;i++)
cin>>Available[i];
for(i=0;i<numOfPro;i++)
for(j=0;j<numOfTyp;j++)
Need[i][j]=Max[i][j]-Allocation[i][j];
}
int Compare(int a[],int b[])
{
int i;
int temp=1;
for(i=0;i<numOfTyp;i++)
if(a[i]>b[i])
{
temp=0;
break;
}
return temp;
}
void CheckSave()
{
int Work[MAX],Finish[MAX];
int i,j,k;
int worning=0;
int Temp;
for(i=0;i<numOfTyp;i++)
Work[i]=Available[i];
for(i=0;i<numOfPro;i++)
Finish[i]=0;
for(i=0;i<numOfPro;i++)
{
for(j=0;j<numOfPro;j++)
{
if(Finish[j]==0&&Compare(Need[j],Work)==1)
{
for(k=0;k<numOfTyp;k++)
Work[k]=Work[k]+Allocation[j][k];
Finish[j]=1;
Temp=j;
break;
}
}
Save[i]=Temp;
}
for(i=0;i<numOfPro;i++)
{
if(Finish[i]==0)
cout<<"注意!当前系统处于非安全状态!"<<endl;
break;
}
cout<<"当前系统处于安全状态!"<<endl;
Disp();
}
void Disp()
{
int i;
cout<<"安全序例为:";
for(i=0;i<numOfPro;i++)
cout<<Save[i];
cout<<endl;
}
void Request()
{
int Pro,Typ[MAX];
int i;
cout<<"请输入几号进程发出资源请求:";
cin>>Pro;
cout<<"请输入其各资源请求量:";
for(i=0;i<numOfTyp;i++)
cin>>Typ[i];
for(i=0;i<numOfTyp;i++)
if(Typ[i]>Need[Pro][i])
{
cout<<"资源请求量大于其需求量了!"<<endl;
break;
}
for(i=0;i<numOfTyp;i++)
if(Typ[i]<=Available[i])
{
Available[i]=Available[i]-Typ[i];
Allocation[Pro][i]=Allocation[Pro][i]+Typ[i];
Need[Pro][i]=Need[Pro][i]-Typ[i];
}
else
{
cout<<"目前尚无这么多资源可供分配,请等待!"<<endl;
break;
}
cout<<"分配所申请的资源后,";
CheckSave();
}
};
void main()
{
YHJ yhj;
int i;
do
{
cout<<"===========================请选择欲要进行操作的序号==========================="<<endl;
cout<<" 1.初始化系统资源"<<endl;
cout<<" 2.检测系统资源分配安全性"<<endl;
cout<<" 3.进程对资源发出请求"<<endl;
cout<<" 0.退出程序"<<endl;
cin>>i;
switch(i)
{
case 1:
yhj.ProTypInsert();
yhj.Set();
break;
case 2:
yhj.CheckSave();
break;
case 3:
yhj.Request();
break;
case 0:
break;
}
}while(i!=0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -