#include<stdio.h>
#include<string.h>
#include<iostream>
#include<stdlib.h>
#include<iomanip>
#include<conio.h>
using namespace std;
const int MAX_P=20;
const int MAXA=10; //定义A类资源的数量
const int MAXB=5;
const int MAXC=7;
typedef struct node{
int a;
int b;
int c;
int remain_a;
int remain_b;
int remain_c;
}bank;
typedef struct node1{
char name[20];
int a;
int b;
int c;
int need_a;
int need_b;
int need_c;
}process;
bank banker;
process processes[MAX_P];
int quantity;
//初始化函数
void initial()
{
int i;
banker.a=MAXA;
banker.b=MAXB;
banker.c=MAXC;
banker.remain_a=MAXA;
banker.remain_b=MAXB;
banker.remain_c=MAXC;
for(i=0;i<MAX_P;i++){
strcpy(processes[i].name,"");
processes[i].a=0;
processes[i].b=0;
processes[i].c=0;
processes[i].need_a=0;
processes[i].need_b=0;
processes[i].need_c=0;
}
}
//新加作业
void add()
{
char name[20];
int flag=0;
int t;
int need_a,need_b,need_c;
int i;
cout<<endl;
cout<<"新加作业"<<endl;
cout<<"━━━━━━━━━━━━━━━━━━━━━━━━━━━━"<<endl;
cout<<"请输入新加作业名:";
cin>>name;
for(i=0;i<quantity;i++){
if(!strcmp(processes[i].name,name)){
flag=1;
break;
}
}
if(flag){
cout<<"错误,作业已存在"<<endl;
}
else{
cout<<"本作业所需A类资源:";
cin>>need_a;
cout<<"本作业所需B类资源:";
cin>>need_b;
cout<<"本作业所需C类资源:";
cin>>need_c;
t=1;
cout<<need_a<<banker.remain_a;
if(need_a>banker.remain_a){
cout<<"错误,所需A类资源大于银行家所剩A类资源"<<endl;
t=0;
}
if(need_b>banker.remain_b){
cout<<"错误,所需B类资源大于银行家所剩B类资源"<<endl;
t=0;
}
if(need_c>banker.remain_c){
cout<<"错误,所需C类资源大于银行家所剩C类资源"<<endl;
t=0;
}
if(t){
strcpy(processes[quantity].name,name);
processes[quantity].need_a=need_a;
processes[quantity].need_b=need_b;
processes[quantity].need_c=need_c;
quantity++;
cout<<"新加作业成功"<<endl;
}
else{
cout<<"新加作业失败"<<endl;
}
}
}
//为作业申请资源
void bid()
{
char name[20];
int i,p;
int a,b,c;
int flag;
cout<<endl<<"为作业申请资源"<<endl;
cout<<"━━━━━━━━━━━━━━━━━━━━━━━━━━━━"<<endl;
cout<<"要申请资源的作业名:";
cin>>name;
p=-1;
for(i=0;i<quantity;i++){
if(!strcmp(processes[i].name,name)){
p=i;
break;
}
}
if(p!=-1){
cout<<"该作业要申请A类资源数量:";
cin>>a;
cout<<"该作业要申请B类资源数量:";
cin>>b;
cout<<"该作业要申请C类资源数量:";
cin>>c;
flag=1;
if((a>banker.remain_a)||(a>processes[p].need_a-processes[p].a)){
cout<<"错误,所申请A类资源大于银行家所剩A类资源或该进程还需数量"<<endl;
flag=0;
}
if((b>banker.remain_b)||(b>processes[p].need_b-processes[p].b)){
cout<<"错误,所申请B类资源大于银行家所剩B类资源或该进程还需数量"<<endl;
flag=0;
}
if((c>banker.remain_c)||(c>processes[p].need_c-processes[p].c)){
cout<<"错误,所申请C类资源大于银行家所剩C类资源或该进程还需数量"<<endl;
flag=0;
}
if(flag){
banker.remain_a-=a;
banker.remain_b-=b;
banker.remain_c-=c;
processes[p].a+=a;
processes[p].b+=b;
processes[p].c+=c;
cout<<"为作业申请资源成功"<<endl;
}
else{
cout<<"为作业申请资源失败"<<endl;
}
}
else{
cout<<"该作业不存在"<<endl;
}
}
//撤消作业
void finished()
{
char name[20];
int i,p;
cout<<endl<<"撤消作业"<<endl;
cout<<"━━━━━━━━━━━━━━━━━━━━━━━━━━━━"<<endl;
cout<<"要撤消作业名:";
cin>>name;
p=-1;
for(i=0;i<quantity;i++){
if(!strcmp(processes[i].name,name)){
p=i;
break;
}
}
if(p!=-1){
banker.remain_a+=processes[p].a;
banker.remain_b+=processes[p].b;
banker.remain_c+=processes[p].c;
for(i=p;i<quantity-1;i++){
processes[i]=processes[i+1];
}
strcpy(processes[quantity-1].name,"");
processes[quantity-1].a=0;
processes[quantity-1].b=0;
processes[quantity-1].c=0;
processes[quantity-1].need_a=0;
processes[quantity-1].need_b=0;
processes[quantity-1].need_c=0;
quantity--;
cout<<"撤消作业成功"<<endl;
}
else{
cout<<"撤消作业失败"<<endl;
}
}
//查看资源情况
void view()
{
int i;
cout<<endl<<"查看资源情况"<<endl;
cout<<"━━━━━━━━━━━━━━━━━━━━━━━━━━━━"<<endl;
cout<<"银行家所剩资源(剩余资源/总共资源)"<<endl;
cout<<"A类:"<<banker.remain_a<<"/"<<banker.a;
cout<<" B类:"<<banker.remain_b<<"/"<<banker.b;
cout<<" C类:"<<banker.remain_c<<"/"<<banker.c;
cout<<endl<<endl<<"作业占用情况(已占用资源/所需资源)"<<endl<<endl;
if(quantity>0){
for(i=0;i<quantity;i++){
cout<<"作业名:"<<processes[i].name<<endl;
cout<<"A类:"<<processes[i].a<<"/"<<processes[i].need_a;
cout<<" B类:"<<processes[i].b<<"/"<<processes[i].need_b;
cout<<" C类:"<<processes[i].c<<"/"<<processes[i].need_c;
cout<<endl;
}
}
else{
cout<<"当前没有作业"<<endl;
}
}
//显示版权信息函数
void version()
{
cout<<endl<<endl;
cout<<" ┏━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl;
cout<<" ┃ 银 行 家 算 法 ┃"<<endl;
cout<<" ┠———————————————————————┨"<<endl;
cout<<" ┃ (c)All Right Reserved Neo ┃"<<endl;
cout<<" ┃ sony006@163.com ┃"<<endl;
cout<<" ┃ version 2004 build 1122 ┃"<<endl;
cout<<" ┗━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl;
cout<<endl<<endl;
}
int main(void)
{
int chioce;
int flag=1;
initial();
version();
while(flag){
cout<<"━━━━━━━━━━━━━━━━━━━━━━━━━━━━"<<endl;
cout<<"1.新加作业 2.为作业申请资源 3.撤消作业"<<endl;
cout<<"4.查看资源情况 0.退出系统"<<endl;
cout<<"请选择:";
cin>>chioce;
switch(chioce){
case 1:
add();
break;
case 2:
bid();
break;
case 3:
finished();
break;
case 4:
view();
break;
case 0:
flag=0;
break;
default:
cout<<"选择错误"<<endl<<endl;
}
}
return 0;
}
分享到:
相关推荐
银行家算法pdf文献打包 共9篇 解晨,王瑜.多资源银行家算法研究与实现[J].电脑知识与技术,2013,9(18):4229-4233. 摘要:在通常情况下,计算机的资源有限,比如只有一台打印机或者只有有限的内存,并且很多资源是独占性...
银行家算法是操作系统中进程管理领域的一个重要概念,主要用于避免死锁的发生,通过预先分配资源的方式确保系统的安全性。此算法由计算机科学领域的先驱之一、图灵奖得主Edsger Dijkstra提出,其核心思想是在系统...
### 银行家算法详解 #### 一、引言 银行家算法是操作系统中用于避免死锁的一种重要策略,其基本思想源自于银行信贷体系的管理方式。在本篇报告中,我们将深入探讨银行家算法的核心原理及其具体实现过程,并通过一...
《银行家算法C语言实现详解》 银行家算法是一种经典的资源分配策略,旨在预防系统中的死锁问题。在多道程序设计系统中,多个进程可能会同时请求多种资源,如果资源分配不当,可能导致进程无法继续执行,形成死锁。...
银行家算法银行家算法银行家算法银行家算法
Java实现银行家算法(GUI界面)A+报告 银行家算法是操作系统中避免死锁的一种经典算法,由Dijkstra提出。该算法可以有效地避免操作系统中出现死锁的问题。本文将详细介绍如何使用银行家算法来处理操作系统给进程分配...
银行家算法找出所有安全序列.cpp银行家算法找出所有安全序列.cpp银行家算法找出所有安全序列.cpp银行家算法找出所有安全序列.cpp银行家算法找出所有安全序列.cpp银行家算法找出所有安全序列.cpp银行家算法找出所有...
《银行家算法与安全性算法详解》 银行家算法和安全性算法是操作系统中资源调度的重要理论,主要用于预防死锁的发生,确保系统的安全性。在多任务环境下,资源的合理分配至关重要,这两种算法为此提供了科学的解决...
用银行家算法防止死锁。 二、实验目的 死锁会引起计算机工作僵死,造成整个系统瘫痪。因此,死锁现 象是操作系统特别是大型系统中必须设法防止的。通过本次实验,使 学生掌握死锁的概念和产生死锁的原因和必要条件,...
(1)若进程P1请求资源,发出请求向量Request1(1,0,2),编写程序用银行家算法判断系统能否将资源分配给它; (2)若进程P2提出请求Request(0,1,0),用银行家算法程序验证系统能否将资源分配给它。
仿真模拟银行家算法对死锁的避免。 所谓安全状态是指系统能按某种进程顺序,来为每个进程pi分配所需的资源,直至满足每个进程对资源的最大需求,使每个进程都可顺利地完成。如果系统无法找到这样一个序列,则系统...
银行家算法是操作系统中一种经典的资源分配策略,用于预防死锁的发生。该算法由艾兹格·迪杰斯特拉在1965年提出,旨在确保系统资源的安全分配,以避免系统进入无法恢复的状态,即死锁。在这个压缩包文件中,包含了一...
银行家算法是操作系统中一种经典的资源分配策略,用于预防死锁的发生。它的核心思想是确保系统在任何时候都不会处于不安全状态,从而避免资源饥饿和系统的崩溃。本程序以可视化的方式展示了这一过程,使得用户能够...
《银行家算法Java实现带UI界面详解》 银行家算法,由荷兰计算机科学家艾兹格·迪科斯彻提出,是一种预防死锁的策略,它主要用于操作系统中资源的分配,以确保系统的安全性。该算法的核心在于预先分配一部分资源,...
《银行家算法在操作系统中的应用——Java实现及图形界面》 银行家算法是操作系统中用于避免死锁的一种著名策略,由艾兹格·迪杰斯特拉在1965年提出。它主要用于解决资源分配问题,确保系统的安全性,防止因不当的...
银行家算法是操作系统中一种著名的资源分配策略,用于预防死锁的发生。它的设计目标是确保系统在面临资源请求时能够避免出现死锁状态,保证系统的安全性。本项目以C语言实现银行家算法,旨在帮助开发者深入理解该...
操作系统中的银行家算法是一种著名的资源分配策略,用于避免系统的死锁情况。在计算机科学中,尤其是在操作系统设计中,死锁是指多个进程互相等待对方释放资源而无法继续执行的状态。银行家算法通过预分配和检查安全...
根据给定的信息,我们可以分析并总结出与“银行家算法”相关的知识点,这些知识点主要集中在操作系统中的资源分配和死锁避免策略上。 ### 银行家算法简介 银行家算法是操作系统中一种用于避免死锁的安全算法。该...
《银行家算法在VC++环境下的实现》 银行家算法是计算机系统中解决并发进程资源分配问题,防止死锁的一种经典策略。它由E.F.科恩于1965年提出,主要用于确保系统的安全性。在多任务并行运行的环境中,如果进程之间对...