⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 yin.cpp

📁 操作系统--银行家算法 实验目的: 1、对死锁避免中的银行家算法作进一步理解。 2、加深理解死锁的概念。 3、加深理解安全序列和安全状态的概念。 4、通过编程
💻 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 + -