金投网

银行家算法代码

银行家算法代码:银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性。

银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。为实现银行家算法,系统必须设置若干数据结构。

银行家算法程序代码如下:

#include <string.h>

#include <stdio.h>

#include <iostream.h>

#define FALSE 0

#define TRUE 1

#define W 10

#define R 10

int M ; // 总进程数

int N ; // 资源种类

int ALL_RESOURCE[W];// 各种资源的数目总和

int MAX[W][R]; // M个进程对N类资源最大资源需求量

int AVAILABLE[R]; // 系统可用资源数

int ALLOCATION[W][R]; // M个进程已经得到N类资源的资源量

int NEED[W][R]; // M个进程还需要N类资源的资源量

int Request[R]; // 请求资源个数

void output()

{

int i,j;

cout<<endl<<"━━━━━━━━━━━━━━━━━━"<<endl;

cout<<"各种资源的总数量:"<<endl;

for (j=0;j<N;j++)

cout<<" 资源"<<j<<": "<<ALL_RESOURCE[j];

cout<<endl;

cout<<"━━━━━━━━━━━━━━━━━━"<<endl;

cout<<"目前各种资源可利用的数量为:"<<endl;

for (j=0;j<N;j++)

cout<<" 资源"<<j<<": "<<AVAILABLE[j];

cout<<endl;

cout<<"━━━━━━━━━━━━━━━━━━"<<endl;

cout<<"各进程还需要的资源数量:"<<endl<<endl;

for(i=0;i<N;i++)

cout<<"        资源"<<i;

cout<<endl;

for (i=0;i<M;i++)

{
cout<<"进程"<<i<<":   ";

for (j=0;j<N;j++)

cout<<NEED[i][j]<<"         ";

cout<<endl;

}

cout<<endl;

cout<<"━━━━━━━━━━━━━━━━━━"<<endl;

cout<<"各进程已经得到的资源量: "<<endl<<endl;

for(i=0;i<N;i++)

cout<<"        资源"<<i;

cout<<endl;

for (i=0;i<M;i++)

{
cout<<"进程"<<i<<":    ";

for (j=0;j<N;j++)

cout<<ALLOCATION[i][j]<<"         ";

cout<<endl;

}

cout<<endl;

}

void distribute(int k)

{

int j;

for (j=0;j<N;j++)

{

AVAILABLE[j]=AVAILABLE[j]-Request[j];

ALLOCATION[k][j]=ALLOCATION[k][j]+Request[j];

NEED[k][j]=NEED[k][j]-Request[j];

}

}

void restore(int k)

{

int j;

for (j=0;j<N;j++)

{

AVAILABLE[j]=AVAILABLE[j]+Request[j];

ALLOCATION[k][j]=ALLOCATION[k][j]-Request[j];

NEED[k][j]=NEED[k][j]+Request[j];

}

}

int check()

{

int WORK[R],FINISH[W];

int i,j;

for(j=0;j<N;j++) WORK[j]=AVAILABLE[j];

for(i=0;i<M;i++) FINISH[i]=FALSE;

for(i=0;i<M;i++)

{

for(j=0;j<N;j++)

{

if(FINISH[i]==FALSE&&NEED[i][j]<=WORK[j])

{

WORK[j]=WORK[i]+ALLOCATION[i][j];

}

}

FINISH[i]=TRUE;

}

for(i=0;i<M;i++)

{

if(FINISH[i]==FALSE)

{

cout<<endl;

cout<<" 系统不安全!!! 本次资源申请不成功!!!"<<endl;

cout<<endl;

return 1;

}

else

{

cout<<endl;

cout<<" 经安全性检查,系统安全,本次分配成功。"<<endl;

cout<<endl;

return 0;

}

}

}

void bank()   // 银行家算法

{

int i=0,j=0;

char flag='Y';

while(flag=='Y'||flag=='y')

{

i=-1;

while(i<0||i>=M)

{

cout<<"━━━━━━━━━━━━━━━━━━"<<endl;

cout<<endl<<" 请输入需申请资源的进程号:";

cin>>i;

if(i<0||i>=M)  cout<<" 输入的进程号不存在,重新输入!"<<endl;

}

cout<<" 请输入进程"<<i<<"申请各类资源的数量:"<<endl;

for (j=0;j<N;j++)

{
cout<<" 资源"<<j<<": ";

cin>>Request[j];

if(Request[j]>NEED[i][j]) // 若请求的资源数大于进程还需要i类资源的资源量j

{

cout<<endl<<" 进程"<<i<<"申请的资源数大于进程"<<i<<"还需要"<<j<<"类资源的数量!";
cout<<" 若继续执行系统将处于不安全状态!"<<endl;

flag='N';

break;

}

else

{

if(Request[j]>AVAILABLE[j]) // 若请求的资源数大于可用资源数

{

cout<<endl<<" 进程"<<i<<"申请的资源数大于系统可用"<<j<<"类资源的数量!";

cout<<" 若继续执行系统将处于不安全状态!"<<endl;

flag='N';

break;

}

}

}

if(flag=='Y'||flag=='y')

{

distribute(i); // 调用change(i)函数,改变资源数

if(check()) // 若系统安全

{

restore(i); // 调用restore(i)函数,恢复资源数

output();   // 输出资源分配情况

}

else       // 若系统不安全

output(); // 输出资源分配情况

}

else      // 若flag=N||flag=n

cout<<endl;

cout<<" 是否继续银行家算法演示,按'Y'或'y'键继续,按'N'或'n'键退出演示: ";

cin>>flag;

}

}

void version()

{

cout<<endl;

cout<<"\t              银 行 家 算 法         "<<endl;

}

void main() // 主函数

{

int i=0,j=0,p;

version();

getchar();

cout<<endl<<"请输入总进程数:";

cin>>M;

cout<<endl<<"━━━━━━━━━━━━━━━━━━"<<endl;

cout<<"请输入总资源种类:";

cin>>N;

cout<<endl<<"━━━━━━━━━━━━━━━━━━"<<endl;

cout<<"请输入各类资源总数:(需要输入数为"<<N<<"个)";

for(i=0;i<N;i++)

cin>>ALL_RESOURCE[i];

cout<<endl<<"━━━━━━━━━━━━━━━━━━"<<endl;

cout<<"输入各进程所需要的各类资源的最大数量:(需要输入数为"<<M*N<<"个)";

for (i=0;i<M;i++)

{

for (j=0;j<N;j++)

{

do

{

cin>>MAX[i][j];

if (MAX[i][j]>ALL_RESOURCE[j])

cout<<endl<<"占有资源超过了声明的该资源总数,请重新输入"<<endl;

}

while (MAX[i][j]>ALL_RESOURCE[j]);

}

}

cout<<endl<<"━━━━━━━━━━━━━━━━━━"<<endl;

cout<<"输入各进程已经占据的各类资源的数量:(需要输入数为"<<M

*N<<"个)";

for (i=0;i<M;i++)

{

for (j=0;j<N;j++)

{

do

{

cin>>ALLOCATION[i][j];

if (ALLOCATION[i][j]>MAX[i][j])

cout<<endl<<"占有资源超过了声明的最大资源,请重新输入"<<endl;

}

while (ALLOCATION[i][j]>MAX[i][j]);

}

}

for (j=0;j<N;j++)  // 初始化资源数量

{

p=ALL_RESOURCE[j];

for (i=0;i<M;i++)

{

p=p-ALLOCATION[i][j];// 减去已经被占据的资源

AVAILABLE[j]=p;

if(AVAILABLE[j]<0)

AVAILABLE[j]=0;

}

}

for (i=0;i<M;i++)

for(j=0;j<N;j++)

NEED[i][j]=MAX[i][j]-ALLOCATION[i][j];

output();

bank();

}

以上内容为银行家算法代码的相关知识介绍,更多银行知识请关注金投银行。

相关推荐

四大行同日公告!获控股股东汇金公司增持
10月11日晚,农业银行、中国银行、建设银行、工商银行宣布公司股份获控股股东汇金公司增持。
浙江绍兴瑞丰农村商业银行:2023年第二次临时股东大会决议公告
浙江绍兴瑞丰农村商业银行:2023年第二次临时股东大会决议公告
本次股东大会由本行董事会召集,由董事长章伟东主持,采取现场和网络投票相结合的方式召开。本次股东大会的召集、召开及表决方式符合《公司法》及本行《章程》及国家相关法律法规的规定。
平安银行:核心数据再创新高 持续升级客户服务
8月28日,他获悉,平安银行私人银行上半年业务实现稳健增长,核心数据再创新高。平安银行私行财富事业部总裁洪帅表示,当前投资环境正在发生变化,客户财富管理需求也在升级:一方面,客户对专业化服务的需求增强,希望金融机构能提供综合解决方案;另一方面,随着产品净值化,客户对长期陪伴式财富管理服务的需求增强。下阶段,平安银行私人银行将持续加快向以客户为中心的经营模式转型,并加强专业用心的投顾陪伴服务能力。
兰州银行经营效益提升 息差水平逐渐筑底
8月25日晚间,兰州银行披露了2023年半年度报告。截至上半年末,该行资产总额4615.04亿元,较年初增长5.86%;吸收存款3379.30亿元,较年初增长4.60%;发放贷款和垫款2,372.13亿元,较年初增长7.76%,为甘肃省存贷款规模最大的商业银行。上半年公司实现营业收入41.45亿元,同比增长8.96%,归属于母公司股东的净利润9.58亿元,同比增长15.68%;资产质量保持稳定,不良贷款率1.70%,连续四年保持下降。
二次元与金融元素有机结合 “平安小财娘”获奖!
近日,在亚洲银行家2023中国未来金融峰会上,由平安银行打造的“平安小财娘”数字营销案例荣获最佳数字化社交媒体项目奖。“平安小财娘”是平安银行根据年轻客群画像和行为特征,定制化打造的原创虚拟IP,将二次元与金融元素有机结合。
银行 活期 1年 3年
工商银行 0.200 1.450 1.950
农业银行 0.200 1.450 1.950
建设银行 0.200 1.450 1.950
中国银行 0.200 1.450 1.950
交通银行 0.200 1.450 1.950
招商银行 0.200 1.450 1.950
中信银行 0.200 1.650 2.000
光大银行 0.200 1.650 2.000
项目名称 银行 收费标准
外币携带证明 温州银行 收费:10元
光票退票 温州银行 收费:100元
光票托收 温州银行 最高250元
外汇汇入汇款转汇 温州银行 最高250元
外汇汇入汇款退汇 温州银行 收费:100元
汇出汇款查询/修改/退汇 温州银行 收费:100元
外汇汇出汇款 温州银行 最高250元
网银互联业务 温州银行 收费:2元
免责声明本文来自第三方投稿,投稿人在金投网发表的所有信息(包括但不限于文字、视频、音频、数据及图表)仅代表个人观点,不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。金投网发布此文目的在于促进信息交流,不存在盈利性目的,此文观点与本站立场无关,不承担任何责任。未经证实的信息仅供参考,不做任何投资和交易根据,据此操作风险自担。侵权及不实信息举报邮箱至:tousu@cngold.org。

银行频道

BANK.CNGOLD.ORG
银行资讯 中资银行 农村信用社 外资银行 银行公告 商业银行 银行专题 私人银行 银行百科 银行导读 银行那点事
银行业务 网上银行 承兑汇票 转账手续费 存款计算器 手机银行 银行利率
取款手续费 银行卡余额查询
银行大全 银行网点 借记卡大全 网上银行大全 银行收费标准
网银开通 存款利率 汇款手续费 网银查询 基准利率 刷卡手续费 银行从业 手续费 存款手续费
-->