银行家算法代码实现(C语言)「建议收藏」

银行家算法代码实现(C语言)「建议收藏」自存#include<stdio.h>#include<stdlib.h>structprocess{inta,b,c;//max值intx,y,z;//allocation值intneed1,need2,need3;//need值intfinish;}p[5];intn=5,i,t;intresource[5]={0};intsum[5]={0};intavai[3]={0};in.

大家好,又见面了,我是你们的朋友全栈君。

 自存

#include <stdio.h>
#include <stdlib.h>

struct process{
    int a,b,c;  //max值
    int x,y,z;  //allocation值
    int need1,need2,need3;  //need值
    int finish;
}p[5];

int n=5,i,t;
int resource[5]={0};
int sum[5]={0};
int avai[3]={0};
int work[3]={0};
int request[3]={0};

void Security_Algorithm(){

    int i;
    printf("系统的available值为:%d %d %d\n",avai[0],avai[1],avai[2]);
    int flag=1;
    int t=0;
    int f[6]={0};
    while(1){
        for(i=0;i<n;i++){
            if((p[i].finish==0)&&(p[i].need1<=work[0]&&p[i].need2<=work[1]&&p[i].need3<=work[2])){
            work[0]+=p[i].x;
            work[1]+=p[i].y;
            work[2]+=p[i].z;
            p[i].finish=1;
            flag++;
            f[t++]=i;  //记录安全序列数
            }
        }
        if(flag>=5) break;
    }

    for(i=0;i<n;i++){
        if(p[i].finish!=1) {
            printf("系统状态不安全\n");
            break;
        }

    }
    if(i==n) {
        printf("系统状态安全\n");
        printf("安全序列为:  ");
        for(i=0;i<t;i++){
            printf("P%d",f[i]);
        }
        printf("\n");
    }

}

int main()
{
    struct process;

    printf("注:本算法代码分析有5个进程、3类资源的问题\n");

    printf("请输入三类资源的总数量为:\n");
    for(i=0;i<3;i++){
        scanf("%d",&resource[i]);
    }

    printf("请按次序输入5个进程(p0-p4)的max值:\n");
    for(i=0;i<n;i++){
        scanf("%d %d %d",&p[i].a,&p[i].b,&p[i].c);
        p[i].finish=0;
    }

    printf("请按次序输入5个进程(p0-p4)的allocation值:\n");
    for(i=0;i<n;i++){
        scanf("%d %d %d",&p[i].x,&p[i].y,&p[i].z);
    }

    for(i=0; i<n; i++){
        sum[0]+=p[i].x;
        sum[1]+=p[i].y;
        sum[2]+=p[i].z;
    }
     for(i=0;i<n;i++){
        p[i].need1=p[i].a-p[i].x;
        p[i].need2=p[i].b-p[i].y;
        p[i].need3=p[i].c-p[i].z;
    }
    //先调用安全算法
    for(i=0;i<3;i++){
        avai[i]=resource[i]-sum[i];
        work[i]=avai[i];
    }
    Security_Algorithm();

    //将finish置零
    for(i=0;i<n;i++){
        p[i].finish=0;
    }


    printf("请输入你想让哪个进程发出请求(0-4):");
    scanf("%d",&t);
    printf("请输入进程发出的请求序列:");

    for(i=0;i<3;i++){
        scanf("%d",&request[i]);
    }



    if(request[0]<=p[t].need1&&request[1]<=p[t].need2&&request[2]<=p[t].need3)
    {
        if(request[0]<=avai[0]&&request[1]<=avai[1]&&request[2]<=avai[2])
        {
        //修改allocation值
            p[t].x+=request[0];
            p[t].y+=request[1];
            p[t].z+=request[2];
            printf("假分配后allocation值:%d %d %d\n",p[t].x,p[t].y,p[t].z);
        //修改need值
            p[t].need1-=request[0];
            p[t].need2-=request[1];
            p[t].need3-=request[2];
            printf("假分配后need值:%d %d %d\n",p[t].need1,p[t].need2,p[t].need3);
        //修改available值
            avai[0]-=request[0];
            avai[1]-=request[1];
            avai[2]-=request[2];

            for(i=0;i<3;i++){
            work[i]=avai[i];
        }
            Security_Algorithm();
            printf("系统可以分配资源\n");

        }
        else printf("不满足available值,无法分配\n");
    }

    else printf("不满足条件任何一个进程的need值,无法分配\n");

    return 0;
}


 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/138860.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号