栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

操作系统(第四版)银行家算法C++实现

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

操作系统(第四版)银行家算法C++实现

操作系统(第四版)银行家算法C++实现

仅做学习使用,只是自己的一个小练习,有些地方的代码是针对例题设置

书籍封面:

题目:(书籍的P111-P114页内容)




以下是代码(配有注释):

#include 
#include //为了是两个数组相等memcpy函数加的头文件
using namespace std;

#define SourseNum 3  //资源种类数,例题中为ABC三种资源(书P112)
#define  N  5 //进程数,5
#define  M  3  //资源种类数
#define  A  0
#define  B  1
#define  C  2  //资源名称,在后面数组中使用的时候可以直接用名字,不需要考虑其实际值是数组下标012


//银行家算法
int Available[SourseNum]= {3,3,2}; //可利用资源数,系统拥有的
int Max[N][M]={ {7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3} };//最大需求矩阵
int Allocation[N][M]={ {0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2} }; //n进程已经拥有的m资源数量
int Need[N][M]={ {7,4,3},{1,2,2},{6,0,0},{0,1,1},{4,3,1} }; //进程n还需要m资源数量
int Request[N][SourseNum]; //存放的内容是n进程请求申请的资源数

//安全性算法
int Work[SourseNum];//工作向量,表示系统可提供给进程继续运行所需的各类资源数目,执行安全算法时Work[] = Available[]
bool Finish[N];//表示系统是否有足够的资源分配给进程使之运行完成,一开始都为false

//声明所有函数
void initial();//初始化所有资源初始值
bool banker_suanfa(int name);//银行家算法 ,name是进程序号
bool is_safe();//安全性算法
void banker_back_suanfa(int name);//不安全的时候要回退资源,银行家算法里面加减了啥都得改回去
void output();//把所有内容可视化输出,不然输着输着忘记内容了


bool banker_suanfa(int name){//银行家算法,失败(当输入不合法的时候)则返回false;name是进程序号
    //(1)
    if(Request[name][A]>Need[name][A]) return false;
    if(Request[name][B]>Need[name][B]) return false;
    if(Request[name][C]>Need[name][C]) return false;
    //(2)
    if(Request[name][A]>Available[A]) return false;
    if(Request[name][B]>Available[B]) return false;
    if(Request[name][C]>Available[C]) return false;
    //(3)输入合理,进行操作
    for(int i =0 ;i0){
            return false;//只要资源数有大于0的就代表还有资源呢,就不能结束!
        }
    }
    return true;//结束啦
}


int main()
{
    int name; //进行申请的进程序号,0——4
    int Sourse_A;//申请的A资源数量
    int Sourse_B;//申请的B资源数量
    int Sourse_C;//申请的C资源数量
 //   initial();//程序开始时初始化 //因为发现错误所以这个函数挂了
    cout<<"程序还未开始时各资源情况如下:"<>name;
        cout<<"n 分别申请ABC多少资源数(数字之间搁一个空格)?n";
        cin>>Sourse_A>>Sourse_B>>Sourse_C;
        Request[name][A]=Sourse_A;
        Request[name][B]=Sourse_B;
        Request[name][C]=Sourse_C;

        if(banker_suanfa(name)){//输入的申请资源数合理,已分配资源给
            if(is_safe()){//如果是安全的
                cout<<"进程"< 

以上代码能够运行,初步判断结果正确
下面是书上的例子,有兴趣的话读者可以把代码拷贝到本地运行,输入测试样例试一下。


over~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/457150.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号