• 空蕉jo太郎
    了解作者
  • C/C++
    开发工具
  • 605KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 0
    下载次数
  • 2018-08-31 22:31
    上传日期
简单的银行家算法及实现,最好在codeblocks 上打开
MyBanker.zip
  • MyBanker
  • bin
  • Debug
  • MyBanker.exe
    1MB
  • obj
  • Debug
  • main.o
    19.5KB
  • MyBanker.depend
    114B
  • main.cpp
    4.3KB
  • MyBanker.layout
    361B
  • MyBanker.cbp
    1.1KB
  • MyQiangZhan.zip
    302.3KB
内容介绍
#include <iostream> using namespace std; int Available[100]; //可利用资源数组 int Max[50][100]; //最大需求矩阵 int Allocation[50][100]; //分配矩阵 int Need[50][100]; //需求矩阵 int Request[50][100]; int Finish[50]; int p[50]; int m,n; //m个进程,n个资源 int IsSafe( ) //系统安全性检查 { int i,j,L=0; int Isfind=1; int Work[100]; for(i=0; i<n; i++) Work[i]=Available[i] ; //建立Available副本Work,即对Work初始化 for(i=0; i<m; i++) Finish[i]=0 ; // 对Finish进行初始化 while(L<m&&Isfind) { Isfind=0; for(i=0; i<m; i++) { if (Finish[i]==1) continue; else { for(j=0; j<n; j++) if(Need[i][j]>Work[j]) break; if(j==n) { Finish[i]=1 ; //表示进程i能结束 for(int k=0; k<n; k++) Work[k]+=Allocation[i][k] ; //进程i能结束,释放资源 p[L++]=i; Isfind=1; if(L==m) break; } } } } if ( L==m ) //判定是否存在安全系列。提示:判定L与m值的关系 { cout<<"系统是安全的!"<<"安全系列是:"<<endl; for(i=0; i<m; i++) { cout<<p[i]; if(i<m-1) cout<<"-->"; } cout<<endl; return 1; } else { cout<<"系统处于不安全状态!"; return 0; } } int main() { int i,j,mi,flag=1; cout<<"输入进程数目:\n"; cin>>m; cout<<"输入资源的种类数:\n"; cin>>n; cout<<"输入每个进程最多所需要的各资源数,按照"<<m<<"×"<<n<<"矩阵输入!\n"; for(i=0; i<m; i++) for (j=0; j<n; j++) cin>>Max[i][j]; cout<<"输入每个进程已分配的各资源数,也按照"<<m<<"×"<<n<<"矩阵输入!\n"; for(i=0; i<m; i++) { for (j=0; j<n; j++) { cin>>Allocation[i][j]; Need[i][j]=Max[i][j]-Allocation[i][j]; if (Need[i][j]<0) { cout<<"你输入的第"<<i+1<<"个进程所拥有的第"<<j+1<<"个资源数错误,请重新输入!\n"; j--; continue; } } } cout<<"请输入各个资源现有的数目:\n"; for(i=0; i<n; i++) cin>>Available[i]; if(IsSafe()!=1) return 0; while(1) { flag=1; cout<<"输入要申请资源的进程号(第一个进程号为0,以此类推):\n"; cin>>mi; cout<<"输入该进程所请求各资源的数量:\n"; for(i=0; i<n; i++) cin>>Request[mi][i]; for(i=0; i<n&&flag; i++) { if (Request[mi][i]>Need[mi][i] ) { cout <<"进程P"<<mi<<"的资源请求数超过进程的需求量,拒绝分配!\n"; flag=0; break; } if (Request[mi][i]>Available[i] ) { cout <<"进程P"<<mi<<"的请求数超过了系统所可用的资源数,拒绝分配!\n"; flag=0; break; } } if(flag) { for(i=0; i<n; i++) //试探分配资源给进程mi { Available[i]-=Request[mi][i] ; Allocation[mi][i]+=Request[mi][i]; Need[mi][i]-=Request[mi][i] ; } if (IsSafe()==1) cout<<"同意分配请求!\n" ; // 提示:调用安全性检测函数 else { cout<<"资源分配请求被拒绝!\n"; for(i=0; i<n; i++) //恢复进程mi以前的资源分配状态 { Available[i]+=Request[mi][i]; Allocation[mi][i]-=Request[mi][i] ; Need[mi][i]+=Request[mi][i]; } } } for(i=0; i<m; i++) Finish[i]=0; char YesNo; while(1) { cout<<"继续请求资源分配请按 y或Y ,结束程序请按 n或N :"; cin>>YesNo; cout<<endl; if (YesNo=='y'||YesNo=='Y') break; else if (YesNo=='n'||YesNo=='N') return 0; } } }
评论
    相关推荐
    • qpopper2.53.tar.Z
      pop3 server
    • imap-4.7.tar.Z
      被广泛使用的email服务器 /IMAPD/POPD
    • 53308459Add_Dlt_TabCtrl.rar
      Tab分页的删除和添加,实现分页动态的管理。
    • ns-allinone-2.33.tar.gz
      ns2.33这是目前比较新的ns2版本,欢迎下载
    • NetVideoActiveX23.rar
      海康威视 网络监控插件 带有例子 和开发的dll文件,非常易用
    • UR054g_(R01).zip
      法国inventel的ur054g(r01)v1.1的无线网卡驱动。
    • eat.rar
      外卖叫餐系统,采用ACCESS数据库,有完整天的后台管理系统
    • KSTVTUNE.ZIP
      装摄像头驱动需要用到的文件。Microsoft DirectX 9 SDK
    • Skin++.rar
      知名的Skin++界面库,内含所有库文件和大量皮肤文件.该库使用方便,可以减少您美化程序的痛苦.本版是破解版,没有注册提示.但只供学习研究使用哦,不要用在商业用途.
    • DLL函数查看器V2.0.rar
      DLL函数查看器V2.0 可以看看dll里导出地函数