银行家算法代码实现(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)


相关推荐

  • NFS(网络文件系统)简介及搭建

    NFS(网络文件系统)简介及搭建

  • Android文字转语音引擎(TTS)简单比较及下载

    Android文字转语音引擎(TTS)简单比较及下载目前国内Android系统自带语音引擎包括华为小米等居然都是不支持中文语音功能,以下是在网上找到的谷歌、科大讯飞和百度的纯语音引擎apk,没有启动界面,安装后在设置中能找到。不知为什么这些引擎在官网上都是找不到的。百度网盘下载地址密码:3si0简单比较com.svox.pico系统自带不支持中文语音com.svox.classic搜svox搜到的,和上面类似不支…

  • python快速排序法实现

    python快速排序法实现基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。一趟快速排序的算法是:1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];3

    2022年10月31日
  • nginx 80端口重定向到443端口

    nginx 80端口重定向到443端口

    2021年10月30日
  • 建立友好城市有什么用_中国国际友好城市联合会

    建立友好城市有什么用_中国国际友好城市联合会原题连接Palmia国有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市。北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同。每对友好城市都向政府申请在河上开辟一条直线航道连接两个城市,但是由于河上雾太大,政府决定避免任意两条航道交叉,以避免事故。编程帮助政府做出一些批准和拒绝申请的决定,使得在保证任意两条航线不相交的情况下,被批准的申请尽量多。输入格式第1行,一个整数N,表示城市数。第2行到第n+1行,每行两个整数,中间用1个空格隔开,分别表示南岸和

  • navicat激活码(破解版激活)「建议收藏」

    navicat激活码(破解版激活),https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

发表回复

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

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