📄 银行家.txt
字号:
#include<stdio.h>
#include<stdlib.h>
#include<string>
#include <iostream >
using namespace std;
int Available[10]; //系统可用资源向量,某种资源当前可以使用的个数
int Allocation[10][10]; //分配矩阵
int Work[10]; //记录安全序列
int Request[10][10]; //进程申请资源向量
int Pause[10];
int wancheng[10]={0}; //记录进程是否完成
int i,j;
int n; //系统资源总数
int m; //总的进程数
int a ; //当前申请的进程号
int b=0,c=0,d=0; //计数器
void fenpei()
{
int flag=1;
while(flag)
{
c=0;
for(i=1;i<=m;i++)
{ //c=0;
if(wancheng[i]==0)
{
a=0;
for(j=1;j<=n;j++)
{
if(Available[j]>=Request[i][j])
{ printf("Available[%d]>=Request[%d][%d]\n",j,i,j);
printf("%d>%d\n",Available[j],Request[i][j]);
a=a+1;
printf("满足可分a=a+1=%d\n",a);
}
}
if(a==n)
{
wancheng[i]=1;
b=b+1;
c=c+1;
printf("%d",c);
Work[d]=i;
d++;
for(j=1;j<=n;j++)
{
Available[j]=Available[j]-Request[i][j];
Allocation[i][j]=Allocation[i][j]+Request[i][j];
Available[j]=Available[j]+Allocation[i][j];
}
}
}
}
if(c==0)
//if((c==0)&&(b!=m))
{
flag=0;
printf("未分配成功,不安全");
}
if(b==m)
{
flag=0;
printf("安全\n");
printf("安全序列:\n");
for(i=0;i<m;i++)
printf("p%d-----",Work[i]);
}
}
}
void main()//主要的输入部分代码
{
printf("请输入系统中共有的资源数:");
scanf("%d",&n);
printf("请输入共有多少个进程:");
scanf("%d",&m);
//初始化系统可用资源向量
for(i=1;i<=n;i++)//for 1
{
printf("第%d类资源当前可以使用的个数:",i);
scanf("%d",&Available[i]);
}//end of for 1
for(i=1;i<=m;i++)//for 2
{
for(j=1;j<=n;j++)//for 3
{
printf("进程P%d对第%d类资源的已分配量:",i,j);
scanf("%d",&Allocation[i][j]);
//Need[i][j]=Max[i][j];
}//end of for 3
}//end of for 2
//void mainrequest() //进程提出新申请的代码部分
//
for(j=1;j<=m;j++)
{
for(i=1;i<=n;i++)//for 4
{
printf("请输入进程P[%d]对%d类资源的申请量:",j,i);
scanf("%d",&Request[j][i]);
// if(Request[j][i]>Available[i])
// printf("\n对某种资源的申请量大于该资源可使用量P[%d]必须等待\n",a);
}
}
fenpei();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -