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

📄 yinhangjiasuanfa.txt

📁 操作系统课程设计----银行家算法实现
💻 TXT
字号:
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
typedef struct Max1
{
     int m_a;
     int m_b;
     int m_c;
}Max;
typedef struct Allocation1
{
     int a_a;
     int a_b;
     int a_c;
}Allocation;
typedef struct Need1
{
     int n_a;
     int n_b;
     int n_c;
}Need;
struct Available1
{
     int av_a;
     int av_b;
     int av_c;
} q;
struct pr
{
     char name;
     Max max;
     Allocation allocation;
     Need need;
     int finishflag;
}p[5];
char na[5];
//*****************************

void init()//读入
{
     printf("各进程的NEED:\n");
     FILE *fp;
     fp=fopen("1.txt","r+");
     for(int i=0;i<5;i++)
     {

           fscanf(fp,"%c,%d,%d,%d,%d,%d,%d\n",&p.name,&p.max.m_a,&p.max.m_b,&p.max.m_c,&p.allocation.a_a,&p.allocation.a_b,&p.allocation.a_c  );
           p.need.n_a=p.max.m_a-p.allocation.a_a;
           p.need.n_b=p.max.m_b-p.allocation.a_b;
           p.need.n_c=p.max.m_c-p.allocation.a_c;
           
           printf("%c:%d,%d,%d\n",p.name,p.need.n_a,p.need.n_b,p.need.n_c);

           
     }
     fclose(fp);
}

//*****************************
int fenpei()//分配
{
     printf("Available:\n");
     printf("%d,%d,%d\n",q.av_a,q.av_b,q.av_c);
     int finishcnt=0,k=0,count=0;
     for(int j=0;j<5;j++)
           p[j].finishflag=0;

     while(finishcnt<5)
     {
           for(int i=0;i<5;i++)
           {
                 if(p.finishflag==0&&q.av_a>=p.need.n_a&&q.av_b>=p.need.n_b&&q.av_c>=p.need.n_c)
                 {
                       q.av_a+=p.allocation.a_a;
                       q.av_b+=p.allocation.a_b;
                       q.av_c+=p.allocation.a_c;
                       p.finishflag=1;
                       finishcnt++;
                       na[k++]=p.name;
                       
                       break;
                 }
                 
           }
           count++;//禁止循环过多
           if(count>5)return 0;
     }
return 1;

}

//*****************************

int shq()
{
     int m,i,j,k;
     printf("请输入进程号和请求资源!如:0   2 0 2\n");
     scanf("%d%d%d%d",&m,&i,&j,&k);
     if(i<=p[m].need.n_a&&j<=p[m].need.n_b &&k<=p[m].need.n_c)
     {
           if(i<=q.av_a&&j<=q.av_b&&k<=q.av_c)
           {
                 p[m].allocation.a_a+=i;
                 p[m].allocation.a_b+=j;
                 p[m].allocation.a_c+=k;
                 
                 p[m].need.n_a=p[m].max.m_a-p[m].allocation.a_a;
                 p[m].need.n_b=p[m].max.m_b-p[m].allocation.a_b;
                 p[m].need.n_c=p[m].max.m_c-p[m].allocation.a_c;
     
                 printf("各进程的NEED:\n");
                 for(int w=0;w<5;w++)
                 printf("%c:%d,%d,%d\n",p[w].name,p[w].need.n_a,p[w].need.n_b,p[w].need.n_c);
                 return 1;
           }
           else
                 printf("Request>Available\n让%c等待......\n",p[m].name);
     }
     else printf("Request>Need\n让%c等待......\n",p[m].name);
     return 0;

}


//*****************************
//追查ZhuiCha.com网络技术 版权归原作者所有
//ZhuiCha.com追查网提示:
//本代码为网络转载
//不保证完全编译通过
//实际上 放置代码的目的主要参考里面的数据结构以及大体流程,代码还是自己写出来得好。
//http://www.zhuicha.com
//IP地址查询 手机号码归属 邮编区号 身份证验证查询 火车时刻表
//成语词典 运程测算 周公解梦 在线学习手册 专业查询网 
void main()
{
     int flag;
     char c;
     cout<<"\n\n\n\n\n\n\n\n\n\t           ";
     for(int i=0;i<30;i++)
           cout<<"*";
     cout<<endl<<"\t"<<"           * 银  行  家  算  法  演  示 *"<<endl;
     cout<<endl<<"\t"<<"           *      \001   大汉    \001         *"<<endl;
     printf("\t           ");
     for( i=0;i<30;i++)
           printf("*");
     printf("\n\n\n\n\n");
     getch();
     printf("\t    请确认已经在\"1.txt\"中正确输入各进程的有关信息\n");
     getch();
     init();
     q.av_a=10;
     q.av_b=5;
     q.av_c=7;
     
     while(flag)
     {
           for(i=0;i<5;i++)
           {
                 q.av_a-= p.allocation.a_a;
                 q.av_b-= p.allocation.a_b;
                 q.av_c-= p.allocation.a_c;
           }
           if(fenpei())
           {
                 printf("\n这样配置资源是安全的!\001_\001\n");
                 printf("其安全序列是:  ");
                 for(int k=0;k<5;k++)
                       printf("-->%c",na[k]);
                 printf("\n");
                 printf("有进程发出Request请求向量吗???(Enter y or Y)\n");
                 c=getch();
                 if(c=='y'||c=='Y')
                 {
                       if(shq())continue;
                       else break;
                 }else flag=0;
                 
           }
           else {flag=0;printf("不安全\n");}
           

     }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -