• 大小: 5KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-08
  • 语言: C/C++
  • 标签:

资源简介

银行家算法是一个避免死锁的著名算法,它以银行借贷系统的分配策略为基础,判断并保证系统的安全运行。

资源截图

代码片段和文件信息

#include  
#include  
#include
using namespace std;  
#define MAX_PROCESS 100  
#define MAX_RESOURCE 100  
int Available[MAX_RESOURCE];                    //可用资源数组    
int Max[MAX_PROCESS][MAX_RESOURCE];            //最大需求矩阵    
int Allocation[MAX_PROCESS][MAX_RESOURCE];    //分配矩阵   
int Need[MAX_PROCESS][MAX_RESOURCE];     //需求矩阵    
int Request[MAX_PROCESS][MAX_RESOURCE];        //进程需要资源数   
int p[MAX_PROCESS];                             //记录序列  
int nm;                                    //n个进程m个资源    
void Init()                //初始化算法    
{    
    int ij;    
    printf(“请输入进程的数目:\n“);  
    scanf(“%d“&n);   
    printf(“请输入资源的种类:\n“);   
    scanf(“%d“&m);  
    printf(“请输入每个进程最多所需的各资源数按照%dx%d矩阵从左到右、从上到下输入:\n“nm);    
    for(i=0;i    {  
        for(j=0;j        {  
            scanf(“%d“&Max[i][j]);  
        }  
    }  
    printf(“请输入每个进程已分配的各资源数也按照%dx%d矩阵从左到右、从上到下输入:\n“nm);    
    for(i=0;i    {    
        for(j=0;j        {    
            scanf(“%d“&Allocation[i][j]);   
            Need[i][j]=Max[i][j]-Allocation[i][j];   
            if(Need[i][j]<0)    
            {    
                printf(“您输入的第%d个进程所拥有的第%d个资源数错误请重新输入:\n“i+1j+1);    
                j--;    
                continue;    
            }    
        }    
    }    
    printf(“请输入各个资源现有的数目:\n“);    
    for(i=0;i    {    
        scanf(“%d“&Available[i]);  
    }      
}    
bool Safe()    //安全性算法  
{    
    int ijkl=0;    
    int Work[MAX_RESOURCE]; //工作数组他表示系统可提供给进程继续运行所需的各类资源数目    
    int Finish[MAX_PROCESS];  //系统是否有足够的资源分配给进程,使之运行完成   
    for(i=0;i    {  
        Work[i]=Available[i];  
    }    
    //Finish每个进程是否安全  
   
    memset(Finish0sizeof(Finish));   
    for(i=0;i    {      
       if(Finish[i]) continue;  
        for(j=0;j        {  
            //第i个进程需要的第j个资源数 > 系统现有的第j个资源数   
            if(Need[i][j]>Work[j]) break;  
        }  
        if(j==m)//如果第i个进程所需的各个资源数都没有超过系统现有的对应资源数    
        {     
            Finish[i]=1;//给该进程的FINISH标记为true    
            for(k=0;k            {    
                Work[k]+=Allocation[i][k];//将Work赋值为 第i个进程各个已分配资源数+系统现有的对应资源数(因为当改进程全部资源数都满足时线程

评论

共有 条评论