银行家算法

银行家算法是一种最有代表性的避免死锁的算法。

我写的代码是C++,唯一不足的就是锁定了资源种数为3种,进程数也为3个,我写这个只是为了实现这个算法而已。我写的代码非常简单,简单到根本不需要添加注释。如果各位有什么特殊要求可以在代码添加改变来满足你所需的要求。并且我已经给出一组实验数据,运行时直接粘贴即可。至少这一组数据是一点问题没有的。再怎么说这个代码糊弄老师肯定是OK的。

废话不说直接上我的代码:

#include<iostream>

using namespace std;

int main()

{

    int w=0;

    int h=0;

    int i=1;

    int j=1;

    int k=1;

    int a=0;

    int b=0;

    int c=0;

    int d;

    int work[4];

    double All[4];

    double Max[6][4];

    double Allocation[6][4];

    double Need[6][4];

    int Available[4]={0};

    int Availabletwo[4]={0};  //数组要开大一点

    cout<<"输入各种资源数量的数组"<<endl;

    for(k=1;k<=3;k++)

    {

        cin>>All[k];

    }

    cout<<"输入Max数组"<<endl;

    for(i=1;i<=5;i++)

    {

        for(j=1;j<=3;j++)

        {

            cin>>Max[i][j];

        }

    }

    cout<<"输入Allocation数组"<<endl;

    for(i=1;i<=5;i++)

    {

        for(j=1;j<=3;j++)

        {

            cin>>Allocation[i][j];

        }

    }

    for(i=1;i<=5;i++)

    {

        for(j=1;j<=3;j++)

        {

            Need[i][j]=Max[i][j]-Allocation[i][j];

        }

    }

    cout<<"输出Need数组"<<endl;

    for(i=1;i<=5;i++)

    {

        for(j=1;j<=3;j++)

        {

            cout<<Need[i][j]<<' ';

        }

        cout<<endl;

    }

    cout<<"输出Available数组"<<endl;

    for(i=1;i<=5;i++)

    {

        a=a+Allocation[i][1];

    }

    Available[1]=All[1]-a;

    Availabletwo[1]=Available[1];

    cout<<Available[1]<<' ';

     for(i=1;i<=5;i++)

    {

        b=b+Allocation[i][2];

    }

    Available[2]=All[2]-b;

    Availabletwo[2]=Available[2];

    cout<<Available[2]<<' ';

     for(i=1;i<=5;i++)

    {

        c=c+Allocation[i][3];

    }

    Available[3]=All[3]-c;

    Availabletwo[3]=Available[3];

    cout<<Available[3]<<' ';

    cout<<endl;

    while(1)

    {

    for(i=1;i<=5;i++)

    {

        if(Available[1]>=Need[i][1]&&Available[2]>=Need[i][2]&&Available[3]>=Need[i][3])

        {

            cout<<"第"<<i<<"个进程暂时加入安全序列"<<endl;

            Available[1]=Available[1]+Allocation[i][1];

            Available[2]=Available[2]+Allocation[i][2];

            Available[3]=Available[3]+Allocation[i][3];

            Need[i][1]=100;

            Need[i][2]=100;

            Need[i][3]=100;

            h=h+1;

            break;

        }

        w=w+1;

    }

    if(h==5)

    {

        cout<<"上述就是安全序列"<<endl;

        cout<<"请输入要请求资源的进程"<<endl;

        cin>>d;

        cout<<"请输入请求资源数量"<<endl;

        for(int o=1;o<=3;o++)

        {

            cin>>work[o];

        }

        if(Availabletwo[1]>=work[1]&&Availabletwo[2]>=work[2]&&Availabletwo[3]>=work[3])

        {

            cout<<"该请求可以满足"<<endl;

        }

        else

            cout<<"该请求不可以被满足"<<endl;

        break;

    }

    if(w>26)

    {

        break;

    }

    }

    if(h<5)

        cout<<"无法得到安全序列"<<endl;

    return 0;

}

 

实验数据:

10 5 7

7 5 3

3 2 2

9 0 2

2 2 2

4 3 3

0 1 0

2 0 0

3 0 2

2 1 1

0   0 2

posted @ 2016-12-14 13:24  chcc  阅读(216)  评论(0编辑  收藏  举报