当前位置:编程学习 > C/C++ >>

银行家算法 c++ 简要 演示

 T0时刻系统状态表:
最大资源需求量
已分配资源数量
A    B    C
 A    B    C
P1
 5    5    9
 2    1    2
P2
 5    3    6
 4    0    2
P3
 4    0    11
 4    0    5
P4
 4    2    5
 2    0    4
P5
 4    2    4
 3    1    4
资源总量:A 17 B 5 C 20
安全性检测的原则是:
1 进程申请资源可分布申请,但总量不应超过其最大需求量
2 每次申请的资源量必须小于系统可供使用的资源量
3 分配完成后,系统是安全的,即仍存在一个序列,可以运行完当前所有进程,这是关键
笔者写了一个程序可以完整演示整个测试流程,看一下运行结果即可理解银行家算法,代码在vc6下测试完美通过。
附上完整代码与注释:
[cpp]
#include<iostream> 
using namespace std; 
 
#define M 5//进程数 
#define N 3//资源数 
 
int R[N]={17,5,20};//资源总数 
int Maxall[N]={0};//被占用的资源数 
int V[N]={0};//可用资源总数 
 
int Max[M][N]={{5,5,9},{5,3,6},{4,0,11},{4,2,5},{4,2,4}};//各进程最大需求量 
int Alloc[M][N]={{2,1,2},{4,0,2},{4,0,5},{2,0,4},{3,1,4}};//各进程已经分配的资源量 
int Need[M][N]={0};//各进程还需要的资源量 
int Appli[M][N]={0};//一次为某个进程申请的资源量 
 
int i,j,n;//程序中用 
 
 
 
int main() 

    void init(); 
    void show(); 
    int applicate(int,int,int,int); 
    void update(int,int,int,int); 
    void release(int,int,int,int); 
    int safecheck(); 
    init(); 
    show(); 
    safecheck();//这里安排显示了按安全序列执行完毕前后的系统状态 
    show(); 
    return 0; 

 
void init()//初始化状态 

/*  cout<<"请依次输入各进程对资源最大需求量:"<<endl;
    for(i=0;i<M;i++)
        for(j=0;j<N;j++)
        {
            cout<<i<<"进程"<<j<<"资源:"<<endl;
            cin>>Max[i][j];
        }
    cout<<"请依次输入各进程已分配资源:"<<endl;
    for(i=0;i<M;i++)
        for(j=0;j<N;j++)
        {
            cout<<i<<"进程"<<j<<"资源:"<<endl;
            cin>>Alloc[i][j];
        }
    cout<<"请依次输入各资源总数:"<<endl;
    for(j=0;j<N;j++)
    {
        cout<<j<<"资源:"<<endl;
        cin>>R[j];
    }
*/ 
//本可以自行输入的,此处为避免大量输入,在程序中初始化 
    for(i=0;i<M;i++) 
        for(j=0;j<N;j++) 
            Need[i][j]=Max[i][j]-Alloc[i][j]; 
 
    for(j=0;j<N;j++) 
        for(i=0;i<M;i++) 
            Maxall[j]+=Alloc[i][j]; 
 
    for(j=0;j<N;j++) 
        V[j]=R[j]-Maxall[j]; 

 
void show()//显示系统状态 

    cout<<"Max:"<<endl; 
    for(i=0;i<M;i++) 
    { 
        for(j=0;j<N;j++) 
            cout<<Max[i][j]<<" "; 
        cout<<endl; 
    } 
    cout<<endl; 
    cout<<"Alloc:"<<endl; 
    for(i=0;i<M;i++) 
    { 
        for(j=0;j<N;j++) 
            cout<<Alloc[i][j]<<" "; 
        cout<<endl; 
    } 
    cout<<endl; 
    cout<<"Need:"<<endl; 
    for(i=0;i<M;i++) 
    { 
        for(j=0;j<N;j++) 
            cout<<Need[i][j]<<" "; 
        cout<<endl; 
    } 
    cout<<endl; 
    cout<<"系统总资源:"<<endl; 
    for(n=0;n<N;n++) 
        cout<<R[n]<<" "; 
    cout<<endl; 
    cout<<"系统剩下的资源"<<endl; 
    for(j=0;j<N;j++) 
    { 
        cout<<V[j]<<" "; 
    } 
    cout<<endl; 

 
int applicate(int i,int r1,int r2,int r3)//资源申请 

    Appli[i][0]=r1; 
    Appli[i][1]=r2; 
    Appli[i][2]=r3; 
    if((Appli[i][0]<=Need[i][0] && Appli[i][1]<=Need[i][1] && Appli[i][2]<=Need[i][2]) && (Appli[i][0]<=V[0] && Appli[i][1]<=V[1] && Appli[i][2]<=V[2])) 
    { 
//      cout<<"申请成功,但还未进行安全性检测..."<<endl; 
        return 1; 
    } 
    else 
    { 
//      cout<<"申请失败..."<<endl; 
        return 0; 
    } 

 
void update(int i,int r1,int r2,int r3)//
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,