| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1249 人关注过本帖
标题:一个关于银行家算法的程序,有一个地方看不明白,求教
取消只看楼主 加入收藏
小鸟向前飞
Rank: 1
等 级:新手上路
帖 子:72
专家分:0
注 册:2007-10-25
结帖率:100%
收藏
 问题点数:0 回复次数:3 
一个关于银行家算法的程序,有一个地方看不明白,求教
#include <string.h>
#include <iostream.h>
#define M 5 //总进程数
#define N 3 //总资源数
#define FALSE 0
#define TRUE 1
//M个进程对N类资源最大资源需求量
int MAX[M][N]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};
//系统可用资源数
int AVAILABLE[N]={10,5,7};
//M个进程已经得到N类资源的资源量
int ALLOCATION[M][N]={{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}};
//M个进程还需要N类资源的资源量
int NEED[M][N]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};
int Request[N]={0,0,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;
      for (j=0;j<N;j++)
   {
      cout<<" 资源"<<j<<": ";
      cin>>Request[j];
      if(Request[j]>NEED[i][j])
   {
          cout<<" 进程"<<i<<"申请的资源数大于进程"<<i<<"还需要"<<j<<"类资源的资源量!";  
          cout<<"申请不合理,出错!请重新选择!"<<endl<<endl;
          flag='N';
          break;
   }
      else
   {
         if(Request[j]>AVAILABLE[j])
   {
            cout<<" 进程"<<i<<"申请的资源数大于系统可用"<<j<<"类资源的资源量!";
            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,j;
   cout<<" 系统可用的资源数为:"<<endl<<endl;
   cout<<" ";
   for (j=0;j<N;j++)cout<<" 资源"<<j<<": "<<AVAILABLE[j];
   cout<<endl;
   cout<<endl;
   cout<<" 各进程还需要的资源量:"<<endl<<endl;
   for (i=0;i<M;i++)
   {
      cout<<"进程"<<i<<":";
   for (j=0;j<N;j++)cout<<" 资源"<<j<<": "<<NEED[i][j];
   cout<<endl;
   }
   cout<<endl;
   cout<<" 各进程已经得到的资源量: "<<endl<<endl;
   for (i=0;i<M;i++)
   {
      cout<<"进程"<<i<<":";
      for (j=0;j<N;j++)cout<<" 资源"<<j<<": "<<ALLOCATION[i][j];
      cout<<endl;
   }
   cout<<endl;
};

void changdata(int k)    //尝试分配资源
{
   int j;
   for (j=0;j<N;j++)
   {
       AVAILABLE[j]=AVAILABLE[j]-Request[j];
       ALLOCATION[k][j]=ALLOCATION[k][j]+Request[j];
       NEED[k][j]=NEED[k][j]-Request[j];
   }
};

void rstordata(int k)  //???
{
    int j;
    for (j=0;j<N;j++)
 {
       AVAILABLE[j]=AVAILABLE[j]+Request[j];
       ALLOCATION[k][j]=ALLOCATION[k][j]-Request[j];
       NEED[k][j]=NEED[k][j]+Request[j];
 }
};


int chkerr(int s)    //安全性检查
{
   int WORK,FINISH[M],temp[M];
   int i,j,k=0;
   for(i=0;i<M;i++)FINISH[i]=FALSE;
   for(j=0;j<N;j++)
   {
      WORK=AVAILABLE[j];
      i=s;
      while(i<M)
   {
         if (FINISH[i]==FALSE&&NEED[i][j]<=WORK)
   {
             WORK=WORK+ALLOCATION[i][j];
             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<<endl;
   cout<<" 本次安全序列:";
   for(i=0;i<M;i++)cout<<"进程"<<temp[i]<<"->";
   cout<<endl<<endl;;
   return 0;
};


蓝色是什么意思??
搜索更多相关主题的帖子: 银行家 算法 
2007-11-25 14:27
小鸟向前飞
Rank: 1
等 级:新手上路
帖 子:72
专家分:0
注 册:2007-10-25
收藏
得分:0 
顶顶顶 等待~~~

未知是最大的诱惑.
2007-11-26 21:24
小鸟向前飞
Rank: 1
等 级:新手上路
帖 子:72
专家分:0
注 册:2007-10-25
收藏
得分:0 
没人来……

未知是最大的诱惑.
2007-11-29 14:34
小鸟向前飞
Rank: 1
等 级:新手上路
帖 子:72
专家分:0
注 册:2007-10-25
收藏
得分:0 
谢谢楼上~~~

未知是最大的诱惑.
2007-12-02 16:55
快速回复:一个关于银行家算法的程序,有一个地方看不明白,求教
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017686 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved