• 银行家算法


    #include "LinkList.h"
    #include "MultiArr.h"
    #include "procs.h"
    #include "str.h"
    #include "stdio.h"
    
    void main()
    {while(1){
        int i , j;
        int index;
        printf("请输入需要访问的文件夹号:
    ");
        scanf("%d",&index);
        CStr doc="test"+CStr(index)+"/";
        CStr SMax=doc+"Max.txt";
        CStr SAllocation=doc+"Allocation.txt";
        CStr SNeed=doc+"Need.txt";
        CStr SAvailable=doc+"Available.txt";
    
        CMultiArr<int> Max(SMax.str,i);
        CMultiArr<int> Allocation(SAllocation.str,i);
        CMultiArr<int> Need(SNeed.str,i);
        CMultiArr<int> Available(SAvailable.str,i);
        int ProcN=Max.Size(0);
        int ResN=Max.Size(1);
        //display
        printf("最大需求矩阵 Max:
    ");
        for(i=0;i<ProcN;i++)
        {
            for(j=0;j<ResN;j++) printf("%d,",Max.Get(i,j));
            printf("
    ");
        }
        printf("分配矩阵 Allocation:
    ");
        for(i=0;i<ProcN;i++)
        {
            for(j=0;j<ResN;j++) printf("%d,",Allocation.Get(i,j));
            printf("
    ");
        }
        printf("需求矩阵 Need:
    ");
        for(i=0;i<ProcN;i++)
        {
            for(j=0;j<ResN;j++) printf("%d,",Need.Get(i,j));
            printf("
    ");
        }
        printf("可用资源向量 Available:
    ");
        for(i=0;i<ResN;i++) printf("%d,",Available.Get(i,j));
        printf("
    ");
        //Build Matric: Work
        CMultiArr<int> Work(Available);//copy by Available
        for(i=0;i<3;i++) printf("%d,",Work.Get(i));
        printf("
    ");
        int * Finish=new int[ProcN];
        zeros(Finish,ProcN);//构造Finish
        CLinkList<int> seq;//安全序列
        int len,oldLen;
        while(1)//进程:行。资源:列。
        {
            oldLen=seq.GetLen();
            for(i=0;i<ProcN;i++)//i 是矩阵的列
            {
                
                if(!Finish[i]){//如果未分配
                    bool yes=1;
                    for(j=0;j<ResN;j++){//j 是资源。对资源进行遍历
                        if(Need.Get(i,j)>Work.Get(j) )//只要有一个资源大于了可分配资源
                        {
                            yes=0;
                            break;
                        }
                    }
                    if(yes)//对于这个进程,所有资源都可以进行分配
                    {//i 进程可以使用 j 资源。运行完毕后Work的 j 资源可以加上他已分配的资源
                        for(int k=0;k<ResN;k++)
                            Work.Set(    Work.Get(k)+Allocation.Get(i,k)   ,k);//i 是矩阵的列,代表进程。k是矩阵的行,代表资源
                        Finish[i]=1;
                        seq.Add(i);
                    }
                }
            }
            len=seq.GetLen();
            if(len==oldLen){//检测到迭代后安全序列的长度没有变化    
                if(isEntire(1,Finish,ProcN))
                {
                    printf("安全序列为:");
                    seq.display();
                }
                else 
                {printf("不存在安全序列。
    ");
                seq.display();}
                break;
            }
        }
        printf("
    ");
    }
        system("pause");
    }
  • 相关阅读:
    各大云服务器的对比
    程式上传的功能修改
    如何免费拥有一个聊天机器人
    自学网站大全(值得收藏)
    三菱PLC串口通信的IO控制
    免费下载知网、万方等数据库文档教程
    QT--Android之全配置教程
    QT--Android之Android环境配置
    QT--Android之Java环境配置
    安装纯净的Windows或者Ubuntu系统教程
  • 原文地址:https://www.cnblogs.com/TQCAI/p/7606839.html
Copyright © 2020-2023  润新知