📄 deadlock.cpp
字号:
#include <stdio.h>
#define MAXP 10//最大进程数
#define MAXR 10//最大资源种类数
int NUMP,NUMR;//进程数目和资源数目
void Safe(int * Available, int Max[MAXP][MAXR], int Alloc[MAXP][MAXR]);//安全算法
bool LE(int * a, int * b, int len);//判断向量a小于等于向量b
int main()
{
int Max[MAXP][MAXR];//= {{3,2,2},{6,1,3},{3,1,4},{4,2,2}};//每一进程需要每一资源最大数
int Alloc[MAXP][MAXR];//= {{1,0,0},{6,1,2},{2,1,1},{0,0,2}};//每一进程已经得到每一资源数
int Available[MAXR];//= {0,1,0};//系统中未分配给进程的每种资源总量3
int i, j;
printf("input the amount of porcess and resource:\n");
scanf("%d %d", &NUMP, &NUMR);
printf("请输入每一资源还可使用数:\n");
for(j = 0; j < NUMR; j++)//输入每一资源还可使用数
scanf("%d", &Available[j]);
printf("请输入进程第一资源最大数:\n");
for(i = 0; i < NUMP; i++)//输入进程第一资源最大数
for(j = 0; j < NUMR; j++)
scanf("%d", &Max[i][j]);
printf("请输入进程已拥有每一资源数:\n");
for(i = 0; i < NUMP; i++)//输入进程已拥有每一资源数
for(j = 0; j < NUMR; j++)
scanf("%d", &Alloc[i][j]);
Safe(Available, Max, Alloc);
return 0;
}
void Safe(int * Available, int Max[MAXP][MAXR], int Alloc[MAXP][MAXR])
{
int CurrentAvail[MAXR];
int Need[MAXR];
int Process[MAXP], pointer = 0;//记录进程的完成顺序
bool Finish[MAXP];//记录进程i是否顺利完成
int i,j;
for(i = 0; i < NUMR; i++)
CurrentAvail[i] = Available[i];
for(i = 0; i < NUMP; i++)
Finish[i] = false;
for(i = 0; i < NUMP; i++)
{
for(j = 0; j < NUMR; j++)//计算进程i需要资源数
Need[j] = Max[i][j] - Alloc[i][j];
if( LE(Need, CurrentAvail, NUMR) && Finish[i] == false )
{//可用资源可满足进程需要的资源
for(j = 0 ; j < NUMR; j++)//完成进程i后计算可用资源
CurrentAvail[j] += Alloc[i][j];
Finish[i] = true;
Process[pointer] = i;
pointer++;
i = -1;
}
}
for(i = 0; i < NUMP; i++)
if( Finish[i] == false )
{//进程没用全部完成,则不安全
printf("unsafe\n");
return ;
}
printf("safe: ");//进程全部顺利完成,安全
for(i = 0; i < NUMP; i++)//输出进程完成顺序
printf("p%d ", Process[i]+1);
printf("\n");
}
bool LE(int * a, int * b, int len)
{//判断长度为len的向量a小于等于b
for(int i = 0; i < len; i++)
if(a[i] > b[i])
return false;
return true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -