#include <iostream>
 #include<string>
 #define False 0
 #define True 1

 using namespace std;

 ] = {  };       //系统->拥有资源
 ][] = {  };        //进程->共需要
 ][] = {  }; //进程->已得到
 ][] = {  };       //进程->还需要

 ] = {  };            //模拟->系统->拥有资源
 //int Request[100] = { 0 };         //进程->请求资源   0.0貌似后来没用到

 ] = {  };           //资源名称。界面使用

 ] = {  };            //存放安全序列

 ;                      //进程的最大数为
 ;                      //资源的最大数为

 void showdata();                  //显示资源矩阵
 int safe();                       //安全性算法

 int main()//主函数
 {
     , m, n, flag;
     char ming;

     //------------------------------------------------------------->>>>>>>>   【界面】    >>>
     cout << "\t*-----------------------------------------------------*" << endl;
     cout << "\t||                                                   ||" << endl;
     cout << "\t||              银行家算法实现                       ||" << endl;
     cout << "\t||                                                   ||" << endl;
     cout << "\t||                                    张金棒         ||" << endl;
     cout << "\t||                                                   ||" << endl;
     cout << "\t||                                  2016.06.29       ||" << endl;
     cout << "\t||                                                   ||" << endl;
     cout << "\t*-----------------------------------------------------*" << endl;

     //------------------------------------------------------------->>>>>>>>   【初始化】    >>>
     cout << "请先输入系统可供资源种类的数量:";
     cin >> n;
     N = n;

     ; i < n; i++)
     {
         cout <<  << "的名称:";
         cin >> ming;
         name[i] = ming;
         cout << "资源的数量:";
         cin >> number;
         Avaliable[i] = number;
     }
     cout << endl;
     cout << "请输入作业的数量";
     cin >> m;
     M = m;
     cout << "请输入各进程的最大需求量(" << m << "*" << n << "矩阵)[Max]:" << endl;
     ; i < m; i++)
         ; j < n; j++)
             cin >> Max[i][j];
     do
     {
         flag = ;
         cout << "请输入各进程已经申请的资源量(" << m << "*" << n << "矩阵)[Allocation]:" << endl;
         ; i < m; i++)
             ; j < n; j++)
             {
                 cin >> Allocation[i][j];
                 ;
                 Need[i][j] = Max[i][j] - Allocation[i][j];
                 Avaliable[j] = Avaliable[j] - Allocation[i][j];
             }
         if (flag)
             cout << "申请的资源大于最大需求值,请重新输入!\n";
     } while (flag);

     showdata();//显示各种资源

     safe();//用银行家算法判定系统是否安全
     system("pause");
     ;
 }

 //------------------------------------------------------------->>>>>>>>   【界面·显示资源矩阵】    >>>
 void showdata()
 {
     int i, j;
     cout << "系统当前可用资源[Avaliable]:" << endl;
     ; i < N; i++)
         cout << name[i] << " ";
     cout << endl;
     ; j < N; j++)
         cout << Avaliable[j]<<" ";
     cout << endl;
     cout << "           Max        Allocation        Need" << endl;
     cout << "process   ";
     ; j < ; j++)
     {
         ; i < N; i++)
             cout << name[i] << " ";
         cout << "        ";
     }
     cout << endl;
     ; i < M; i++)
     {
         cout << " " << i << "        ";
         ; j < N; j++)
             cout << Max[i][j] << " ";
         cout << "        ";
         ; j < N; j++)
             cout << Allocation[i][j] << " ";
         cout << "        ";
         ; j < N; j++)
             cout << Need[i][j] << " ";
         cout << endl;
     }
 }
 //------------------------------------------------------------->>>>>>>>   【银行家算法】    >>>
 int safe()
 {
     , m, apply, Finish[] = {  };  //apply [应用,使用]
     int j;
     ; i < N; i++)
     {
         Work[i] = Avaliable[i];
     }
     ; i < M; i++)//------------------------------------->>>>>>>>>>选定进程  i
     {
         apply = ;
         ; j < N; j++)//--------------------------------->>>>>>>>>>选定资源  j
         {
             if (Finish[i] == False&&Need[i][j] <= Work[j])//------>>>>>>>>>>第i个进程j类所需资源小于系统拥有的资源
             {
                 apply++;
                 if (apply == N)//--------------------------------->>>>>>>>>>当i进程各类资源都满足后
                 {
                     ; m < N; m++)
                         Work[m] = Work[m] + Allocation[i][m];//--->>>>>>>>>>分配其资源使其运行结束然后回收资源
                     Finish[i] = True;//--------------------------->>>>>>>>>>i进程执行完毕
                     temp[k] = i;//-------------------------------->>>>>>>>>>写入进程号到序列中
                     i = -;//------------------------------------->>>>>>>>>>检查前面的是否有可满足的
                     k++;//---------------------------------------->>>>>>>>>>准备好写下一个安全序列项
                 }
             }
         }
     }
     ; i < M; i++)
     {
         if (Finish[i] == False)
         {
             cout << "系统不安全" << endl;//不成功 系统不安全
             ;
         }
     }
     cout << "系统是安全的!" << endl;//如果安全,输出成功
     cout << "分配的序列:";
     ; i < M; i++) //输出运行进程的数组
     {
         cout << temp[i];
         ) cout << "->";
     }
     cout << endl;
     ;
 }

c++银行家算法的更多相关文章

  1. c/c++多线程模拟系统资源分配(并通过银行家算法避免死锁产生)

    银行家算法数据结构 (1)可利用资源向量Available 是个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目.如果Available[j]=K,则表示系统中现有Rj类资源K个. (2) ...

  2. Round() 四舍五入 js银行家算法(转)

    首先问一下round(0.825,2) 返回的结果,大家猜一猜, 首先SQL server 返回的是 0.83 js的返回结果 是0.83,code 如下: var b = 0.825;        ...

  3. 银行家算法java实现

    关于银行家算法的理论知识,课本或者百度上有好多资料,我就不再多说了,这里把我最近写的银行家算法的实现带码贴出来. 由于这是我们的一个实验,对系统资源数和进程数都指定了,所以这里也将其指定了,其中系统资 ...

  4. 操作系统,银行家算法模拟实现(Windows 环境 C++)

    计算机操作系统课设需要,写了两个下午的银行家算法(陷在bug里出不来耽误了很多时间),参考计算机操作系统(汤子瀛) 实现过程中不涉及难度较大的算法,仅根据银行家算法的思想和步骤进行实现.以下为详细步骤 ...

  5. 银行家算法C++程序

    此程序在Windows10    CodeBlocks17.12环境下测试运行,其他编程环境未经测试! 作业需求↓↓↓↓↓↓ 运行效果图如下 (codeblocks下载地址http://www.cod ...

  6. python模拟银行家算法

    前言: 大二第一学期学习了操作系统,期末实验课题要求模拟算法.遂根据自己学习的python写下此文.以此锻炼自己编码能力.虽说是重复造轮子,但还是自己的思路体现 代码及注释如下(银行家算法不再赘述): ...

  7. 预防和避免死锁的方法及银行家算法的java简单实现

    预防死锁 (1) 摒弃"请求和保持"条件 基本思想:规定所有进程在开始运行之前,要么获得所需的所有资源,要么一个都不分配给它,直到所需资源全部满足才一次性分配给它. 优点:简单.易 ...

  8. Round() 四舍五入 js银行家算法

    首先问一下round(0.825,2) 返回的结果,大家猜一猜, 首先SQL server 返回的是 0.83 js的返回结果 是0.83,code 如下: var b = 0.825;        ...

  9. C程序模拟实现银行家算法

    C程序模拟实现银行家算法 上周又做操作系统实验,题目是用程序模拟实现银行家算法,写了半天还真有点晕,主要是因为想尽可能符合课本上的描述,所以写出来的程序就比较恶心了,好了,银行家算法就不多说了,不了解 ...

随机推荐

  1. MySql入门(2-1)windows下安装mysql的两种方式

    一.下载mysql 1.下载解压MySQL 登录oracle主页,需要用户名和口令: lshengqi@netease.com/1wsx**** 下载路径:: https://dev.mysql.co ...

  2. 搭建ssm框架,可实现登录和数据展示以及增删改查

    需求: 后台使用ssm(spring-springMVC-mybatis)进行整合 前台使用bootstrap框架 前后台交互使用Ajax进行发送 表结构: 登录页面后显示所有用户信息,可对每条进行增 ...

  3. notepad++运行Python

    1.打开notepad++的菜单栏,点击run 2.输入cmd /k python "$(FULL_CURRENT_PATH)" & PAUSE & EXIT 3. ...

  4. LSTM主要思想和网络结构

    在你阅读这篇文章时候,你都是基于自己已经拥有的对先前所见词的理解来推断当前词的真实含义.我们不会将所有的东西都全部丢弃,然后用空白的大脑进行思考.我们的思想拥有持久性. 相关信息和当前预测位置之间的间 ...

  5. python flask框架 数据库的使用

    #coding:utf8 from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) # ...

  6. python flask框架 tempates 模版的使用

    在py文件同级下 建立templates文件夹,再文件夹中编写html文件 1 向模版中传递参数: ''' 1 向模板传送 参数 ''' @app.route('/') def index(): na ...

  7. python之路——初识函数

    阅读目录 为什么要用函数 函数的定义与调用 函数的返回值 函数的参数 本章小结 返回顶部 为什么要用函数 现在python届发生了一个大事件,len方法突然不能直接用了... 然后现在有一个需求,让你 ...

  8. Java Class文件格式详解

    magic[4字节] 魔数,用来判断是否可以被虚拟机使用.固定值为0xCAFEBABE(咖啡宝贝)minor_version[2字节] 次版本号major_version[2字节] 主版本号,低版本的 ...

  9. Java面试题—初级(3)

    21.ArrayList和Vector的区别 这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态 ...

  10. 使用NPOI-创建Excel

    这里简单的使用一下NPOI ,什么是NPOI? 既然你已经在需要使用了,就一定知道NPOI是干什么用的了. 开始正题吧. 我用控制台程序来给大家演示一下: 一.创建控制台程序 自行脑补 二.添加NPO ...