c语言银行家算法

这篇博客介绍了如何使用C语言实现银行家算法,通过具体的测试数据展示了算法的运行过程,包括资源分配成功、申请资源超出需求以及发生死锁的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天晚上上操作系统实验,刚刚才把实验报告补完。。。。。。。

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

#define PRONUM 5

typedef struct {//数据结构是参考网上的写的,保存abc三种资源的数量,以下的矩阵都可以用这个结构体的数组来表示
    int a;
    int b;
    int c;
}sor;

sor max[PRONUM]={ {7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};//初始化最大需求矩阵
sor ali[PRONUM]={ {0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}};//初始化已分配矩阵
sor need[PRONUM]={ {7,4,3},{1,2,2},{6,0,0},{0,1,1},{4,3,1}};//初始化还需要的资源矩阵
sor source={3,3,2};//初始化系统所能提供的资源矩阵

int safeorder[PRONUM];//记录下安全序列

void tryali(int pro,sor *s){//尝试给进程分配资源

    source.a -= s->a;//修改系统可以提供的资源数目,减去刚刚分配给进程的
    source.b -= s->b;
    source.c -= s->c;

    ali[pro].a += s->a;//修改已经分配的资源矩阵,加上刚刚分配给进程的资源
    ali[pro].b += s->b;
    ali[pro].c += s->c;

    need[pro].a -= s->a;//修改need矩阵,减去刚刚分配给进程的资源
    need[pro].b -= s->b;
    need[pro].c -= s->c;
}

void rollback(int pro,sor *s){//将系统资源分配恢复到初始状态

    source.a += s->a;//修改系统可提供的资源数目,重新加上刚刚已经分配给进程的资源
    source.b += s->b;
    source.c += s->c;

    ali[pro].a -= s->a;//修改已分配资源矩阵,减去刚刚分配给进程的资源
    ali[pro].b -= s->b;
    ali[pro].c -= s->c;

    need[pro].a += s->a;//修改need矩阵,重新加回刚刚分配给进程的资源
    need[pro].b += s->b;
    need[pro].c += s->c;
}

int safecheck(){//安全性检查

    sor work=source;//因为是尝试性地分配,故不能直接修改source,而是用work来代替
    int finish[PRONUM]={0,0,0,0,0};//进程在未完成之前finish的值都为0
    int i=0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值