📄 yin.cpp
字号:
// yin.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"//多资源银行家算法
#include <stdio.h>
#include <stdlib.h>
//A为已分配资源矩阵,C为请资源矩阵,V为可用资源。
int A[10][10], C[10][10], V[10];
//flag为标识进程是否完成,0表示还没完成,1表示完成。
int flag[10]={0};
//扫描矩阵函数,看是否有可满足的进程,有则返回指向该进程的序号,还则返-1
//maxpro为最大进程数,maxres为最大资源数
int scan(int maxpro,int maxres);
void main()
{
int i, j, m, resTotal, proTotal;
int sequen[10]; //保存安全序列
int selected;
int k=0;
printf("输入有多少种资源:");
scanf("%d", &resTotal);
for (i=0;i<resTotal;i++)
{
printf("输入第%d种资源的可用数目:", i+1);
scanf("%d", &V[i]);
}
printf("输入有多少个进程:");
scanf("%d", &proTotal);
for (i=0; i<proTotal; i++)
{
for (j=0; j<resTotal; j++)
{
printf("输入第%d个进程第%d种资源的已分配数:", i+1, j+1);
scanf("%d", &A[i][j]);
}
}
for (i=0; i<proTotal; i++)
{
for (j=0; j<resTotal; j++)
{
printf("输入第%d个进程第%d种资源的请求数:", i+1, j+1);
scanf("%d", &C[i][j]);
}
}
//开始扫描
for(m=0; m<proTotal; m++)
{
selected=scan(proTotal,resTotal);
if(selected == -1)
{
printf("不安全 ");
exit(0);
}
//分配资源
for (i=0; i<resTotal; i++)
{
V[i]-=C[selected][i];
A[selected][i]+=C[selected][i];
C[selected][i]-=C[selected][i];
}
//回收资源
for(i=0; i<resTotal; i++)
{
V[i]+=A[selected][i];
flag[selected]=1;
}
sequen[k++]=selected;
}
printf(" 状态安全! 安全进程序列:");
for(i=0; i<k; i++)
printf("%d ", sequen[i]+1);
printf(" ");
}
int scan(int maxpro, int maxres)
{
int i, j, temp;
int m=-1;
for (i=0; i<maxpro; i++) //对进程逐个扫描
{
if(flag[i] == 0) //判断些进程是否已完成分配工作
{
temp=0;
for (j=0; j<maxres; j++)//对进程里的请求资源逐个扫描
{
if(C[i][j] <= V[j])
temp++;
}
if(temp == maxres) //判断些是否可满足些进程
{
m=i;
break;
}
}
}
return m;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -