用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c++代码库

银行家算法

2012-10-13 作者: feng举报

[c++]代码库

#include<iostream>
using namespace std;
int avaResour[3]={3,3,2};
int allocation[5][3]={{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}};
int maxRequest[5][3]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};
int nneed[5][3]={{7,4,3},{1,2,2},{6,0,0},{0,1,1},{4,3,1}};
void rrequest();
bool safeTest();
 
int main()
{
    rrequest();
    return 0;
}
 
void rrequest()
{
    int sqjc=0,i=0,l=0,a=0,b=0,c=0;
    char contn=0;
    cout<<endl<<"进程个数:5   资源个数:3"<<endl<<"可用资源向量Available:"<<endl;
    for(i=0;i<3;i++)
        cout<<avaResour[i]<<"       ";
    cout<<endl<<"最大需求矩阵Max:"<<endl;
    for(i=0;i<5;i++)
    {
        for(l=0;l<3;l++)
            cout<<maxRequest[i][l]<<"       ";
        cout<<endl;
    }
    cout<<"已分配矩阵Allocation:"<<endl;
    for(i=0;i<5;i++)
    {
        for(l=0;l<3;l++)
            cout<<allocation[i][l]<<"       ";
        cout<<endl;
    }
    cout<<"需求矩阵Need:"<<endl;
    for(i=0;i<5;i++)
    {
        for(l=0;l<3;l++)
            cout<<nneed[i][l]<<"       ";
        cout<<endl;
    }
    cout<<"输入发起请求的进程(0-4): ";
    cin>>sqjc;
    while(sqjc>4||sqjc<0)
    {
        cout<<endl<<"不要乱输! ^_^"<<endl;
        cout<<endl<<"输入发起请求的进程(0-4): ";
        cin>>sqjc;
    }
    cout<<"输入请求资源的数目,按照这样的格式输入 x x x: ";
    cin>>a>>b>>c;
    if(a<=nneed[sqjc][0] && b<=nneed[sqjc][1] && c<=nneed[sqjc][2])
    {
        cout<<endl<<"开始执行银行家算法..."<<endl;
        if(a<=avaResour[0] && b<=avaResour[1] && c<=avaResour[2])
        {
            avaResour[0]=avaResour[0]-a; avaResour[1]=avaResour[1]-b;
            avaResour[2]=avaResour[2]-c;
            allocation[sqjc][0]=allocation[sqjc][0]+a;
            allocation[sqjc][1]=allocation[sqjc][1]+b;
            allocation[sqjc][2]=allocation[sqjc][2]+c;
            nneed[sqjc][0]=nneed[sqjc][0]-a;
            nneed[sqjc][1]=nneed[sqjc][1]-b;
            nneed[sqjc][2]=nneed[sqjc][2]-c;
            cout<<endl<<"试分配完成..."<<endl;
            if(safeTest())
            {
                cout<<endl<<"开始给第"<<sqjc<<"个进程分配资源..."<<endl
                    <<"分配完成,已更新Allocation_list.txt"<<endl;
                for(i=0;i<5;i++)
                    if(nneed[i][0]==0 && nneed[i][1]==0 && nneed[i][2]==0)
                        for(l=0;l<3;l++)
                        {
                            avaResour[l]=avaResour[l]+allocation[i][l];
                            allocation[i][l]=0;
                        }
            }                          
            else
            {
                cout<<endl<<"系统已恢复试分配前状态。"<<endl;
                avaResour[0]=avaResour[0]+a; avaResour[1]=avaResour[1]+b;
                avaResour[2]=avaResour[2]+c;
                allocation[sqjc][0]=allocation[sqjc][0]-a;
                allocation[sqjc][1]=allocation[sqjc][1]-b;
                allocation[sqjc][2]=allocation[sqjc][2]-c;
                nneed[sqjc][0]=nneed[sqjc][0]+a;
                nneed[sqjc][1]=nneed[sqjc][1]+b;
                nneed[sqjc][2]=nneed[sqjc][2]+c;       
            }
        }
        else
            cout<<endl<<"试分配失败,系统无足够资源"<<endl;
    }
    else
        cout<<endl<<"Error!申请的资源大于需求值"<<endl;
    xz:
    cout<<"\n\n"<<"要继续吗?(y-继续;n-终止):";
    cin>>contn;  
    switch(contn)
    {
        case 'y':rrequest();
        case 'n':break;
        default:cout<<"亲,不要乱输哦"<<endl;
                goto xz;break;
    }
}
 
bool safeTest()
{
    int s=0,m=0,z=0,r[5]={0},y=0,wwork[3]={0};
    bool ffinish[5]={0};
    cout<<endl<<"进入安全性测试!"<<endl;
    for(s=0;s<3;s++)
        wwork[s]=avaResour[s];
    for(z=0;z<5;z++)
    {
        for(s=0;s<5;s++)
            if(ffinish[s]==0 && nneed[s][0]<=wwork[0] && nneed[s][1]<=wwork[1]
                && nneed[s][2]<=wwork[2])
            {
                for(m=0;m<3;m++)
                    wwork[m]=wwork[m]+allocation[s][m];
                ffinish[s]=1;
                r[y]=s;
                y++;
            }
    }
    if(y==5)
    {
        cout<<endl<<"找到一个安全序列:";
        for(s=0;s<2;s++)
            cout<<"P"<<r[2*s]<<"--->"<<"P"<<r[2*s+1]<<"--->";
        cout<<"P"<<r[4]<<endl<<"已通过安全检测!"<<endl;
        return 1;
    }
    cout<<endl<<"没有找到安全序列!"<<endl<<"安全测试失败。"<<endl;
    return 0;
}



网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...