银行家算法C语言代码

更新时间:2023-05-23 15:45:31 阅读: 评论:0

# include "stdio.h"
# define M 50
int max[M][M];
int allocation[M][M];
int need[M][M];
int available[M]; 
int i, j,  n, m, anquan,x=0;
main()
  {  void check();
      int  p,q,control;
      int req[M],allocation1[M][M],need1[M][M],available1[M];
        printf("输入进程总数:");
        scanf("%d", &n);
        printf("输入资源种类数量:");
        scanf("%d", &m);
        printf("输入需求矩阵Max:\n");
        for(i=0;i<n; i++)
        for(j=0;j<m; j++)
        scanf("%2d",&max[i][j]);
        printf("输入已分配矩阵Allocation:\n");
        for(i=0;i<n; i++)
        for(j=0;j<m; j++)
        scanf("%d", &allocation[i][j]);             
        for (i=0;i<n; i++)
        for(j=0;j<m; j++)
        need[i][j]=max[i][j]-allocation[i][j];
        printf("输入资源的系统初始值:\n");
        for (j=0;j<m;j++)
        scanf("%d", &available[j]);
        for (j=0;j<m;j++)
        for(i=0;i<n;i++)
        available[j]=available[j]-allocation[i][j];           
        check();                               
    if (anquan==1)                            //如果已知的状态安全则执行以下代码
    {
    for(control=0;;control++)
    {  p=0,q=0;
        printf("输入请求的进程号: ");
        scanf("%d", &i);             
桥梁工程论文
        printf("输入该进程的请求资源数组:");
        for(j=0;j<m; j++)
        scanf("%d",&req[j]);       
        for(j=0;j<m; j++)
          if(req[j]>need[i][j])
            p=1;       
        if(p)
            printf("请求资源大于该进程还需要的资源!\n");
        el
          {
            for(j=0;j<m; j++)
            if(req[j]>available[j])//判断请求是否大于可用资源
                q=1; 
            if(q)
                printf("可用资源不能满足请求!\n");
            el
              {
                for(j=0;j<m; j++)    //满足两大条件
                    {
                   
                      available1[j]=available[j];      //保持资源的当前
                        allocation1[i][j]=allocation[i][j];
                        need1[i][j]=need[i][j];沙眼是怎么引起的
                        available[j]=available[j]-req[j];  //尝试把资源分配给进程
                        allocation[i][j]=allocation[i][j]+req[j];
                        need[i][j]=need[i][j]-req[j];
                        if(need[i][j]==0)
                        x=x+1;                //当进程满足时释放资源
                       
                    }
化合反应的概念
                    if(x==m)
                        for(j=0;j<m;j++)
                        {
                    available[j]=available[j]+allocation[i][j];
                    allocation[i][j]=0;
                    available1[j]=available[j];
                    x--;
                        }
带有心字的成语                        el x=0;
                check();                       
                if(anquan==0)                       
                  {for (j=0;j<m; j++)
                    {    available[j]=available1[j];  //还原分配前的状态
                          allocation[i][j]=allocation1[i][j];
                          need[i][j]=need1[i][j];
                    }
多宝鱼蒸多久
                  printf("执行该进程不安全!返回继续操作。\n");
               
                  }
              }
            }
    printf("是否继续分配?\n"); 
    }
  }
}
void check()    //安全性算法
  {  int k, f, no=0;
      int work[M],a[M];
      char  finish[M];
      anquan=1;
      for(i=0;i<n; i++)
        finish[i]='F';     
      for(j=0;j<m; j++)
      work[j]=available[j]; 
      k=n;
    do
        {
          for (i=0;i<n; i++)
              {if (finish[i]=='F')好用的素颜霜
                {  f=1;
                    for (j=0;j<m; j++)
                    if (need[i][j]>work[j])
                      f=0;
                    if (f==1)    //找到还没完成的且需求数小于可提供进程继续运行的
                      {  finish[i]='T';   
                        a[no++]=i;      //记录安全序列号
                        for (j=0;j<m; j++)
                        work[j]=work[j]+allocation[i][j]; //释放该进程已分配的资源
                        available[j] =work[j];
                      }
                  }
                }
            k--;
          }while(k>0);   
      f=1;
      for (i=0;i<n; i++)          //判断有没有进程没完成
种类英语
        {
          if (finish[i]=='F')
            {
              f=0;
              break;
            }
        }
      if (f==0)         
        {
            printf("不安全状态!\n");
            anquan=0;bzha
          }
      el                     
        {
           
            printf("处于安全状态.");
            printf("安全序列号:");
            for (i=0;i<n;i++)

本文发布于:2023-05-23 15:45:31,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/925268.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:进程   资源   输入   请求   分配   状态   继续
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图