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

📄 单资源银行家.cpp

📁 操作系统的程序 和代码算法编程 操作系统的程序 和代码算法编程
💻 CPP
字号:
单资源家算法

#include "string.h"
#include "iostream.h"
#define M 5           //总进程数
//#define N 1          //总资源数
#define FALSE 0
#define TRUE 1
       //M个进程对某类资源最大资源需求量
             int MAX[M][1]={{7},{3},{9},{2},{4}};
          //系统可用资源数
        int AVAILABLE[1]={3}; 
     //M个进程已经得到某类资源的资源量
           int ALLOCATION[M][1]={{0},{2},{3},{2},{0}};
  //M个进程还需要某类资源的资源量
            int NEED[M][1]={{7},{1},{6},{0},{4}};
           int Request[1]={0};
          void main()
                      {
                       int i=0,j=0;
                        char flag='Y';
                        void showdata();
                        void changdata(int);
                        void rstordata(int);
                        int chkerr(int);
                        showdata();
                        while(flag=='Y'||flag=='y')
                        {
                          i=-1;
                          while(i<0||i>=M)
                          {
       cout<<"请输入需申请资源的进程号(从0到"<<M-1<<"否则重输入!):";
                           cin>>i;
       if(i<0||i>=M)cout<<"输入的进程号不存在,重新输入!"<<endl;
                          }
        cout<<"请输入进程"<<i<<"申请的资源数"<<endl;
         cout<<"资源"<<0<<":  ";
        cin>>Request[0];
       if(Request[0]>NEED[i][0])
         {
             cout<<"进程"<<i<<"申请的资源数大于进程"<<i<<"还需要"<<0<<"类资源的资源量!";
              cout<<"申请不合理,出错!请重新选择!"<<endl;
        flag='N';
          break;
               }
               else
                           {
                            if(Request[0]>AVAILABLE[0])
                            {
           cout<<"  进程"<<i<<"申请的资源数大于系统可用"<<0<<"类资源的资源量!";
           cout<<"申请不合理,出错!请重新选择!"<<endl<<endl;
                             flag='N';
                             break;
                            }
                  }
                
           if(flag=='Y'||flag=='y')
              {
             changdata(i);
                           if(chkerr(i))
                           {
                            rstordata(i);
                            showdata();
                           }
                           else
                            showdata();
                          }
                          else
                           showdata();
                          cout<<endl;
        cout<<"  是否继续银行家算法演示,按'Y'或'y'键继续,按'N'或'n'键退出演示: ";
                          cin>>flag;
                        }
                        }

       void showdata()
          {
            int i;
       cout<<"系统可用的资源数为:"<<endl<<endl;
            cout<<"      ";
            
				cout<<"  资源"<<0<<":  "<<AVAILABLE[0]<<endl;
                            cout<<" 各进程还需要的资源量:"<<endl;
                        for (i=0;i<M;i++)
                        {
                          cout<<"进程"<<i<<":";
      cout<<"  资源"<<0<<":  "<<NEED[i][0];
                                cout<<endl;
                        }
                            cout<<endl;
 cout<<"各进程已经得到的资源量:  "<<endl<<endl;
         for (i=0;i<M;i++)
                        {
                          cout<<"进程"<<i<<":";
                         
				cout<<" 资源"<<0<<":   "<<ALLOCATION[i][0]<<endl;
                                
                        }
                            cout<<endl;
                        };
                        void changdata(int k)
                        {
                        
         AVAILABLE[0]=AVAILABLE[0]-Request[0];
      ALLOCATION[k][0]=ALLOCATION[k][0]+Request[0];
                          NEED[k][0]=NEED[k][0]-Request[0];
                        
                        };
                        void rstordata(int k)
                        {
                        
                          AVAILABLE[0]=AVAILABLE[0]+Request[0];
                          ALLOCATION[k][0]=ALLOCATION[k][0]-Request[0];
                          NEED[k][0]=NEED[k][0]+Request[0];
                        
                        };
                        int chkerr(int s)
                        {
                        int WORK,FINISH[M],temp[M];
                        int i,k=0;
                        for(i=0;i<M;i++)FINISH[i]=FALSE;
                        
                        WORK=AVAILABLE[0];
                        i=s;
                        while(i<M)
                        {
                          if (FINISH[i]==FALSE&&NEED[i][0]<=WORK)
                          {
                           WORK=WORK+ALLOCATION[i][0];
                           FINISH[i]=TRUE;
                           temp[k]=i;
                           k++;
                           i=0;
                          }
                          else
                          {
                           i++;
                          }
                        }
                        for(i=0;i<M;i++)
                          if(FINISH[i]==FALSE)
                          {
                           cout<<endl;
            cout<<"  系统不安全!!! 本次资源申请不成功!!!"<<endl;
                           cout<<endl;
                           return 1;
                          }
                        cout<<endl;
                        cout<<"  经安全性检查,系统安全,本次分配成功。"<<endl;
                        cout<<"  本次安全序列:";
                        for(i=0;i<M;i++)cout<<"进程"<<temp[i]<<"->";
                        return 0;
                        };

⌨️ 快捷键说明

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