亲测银行家和随机算法在一个主函数里.docx

上传人:b****5 文档编号:6691366 上传时间:2023-01-09 格式:DOCX 页数:11 大小:16.33KB
下载 相关 举报
亲测银行家和随机算法在一个主函数里.docx_第1页
第1页 / 共11页
亲测银行家和随机算法在一个主函数里.docx_第2页
第2页 / 共11页
亲测银行家和随机算法在一个主函数里.docx_第3页
第3页 / 共11页
亲测银行家和随机算法在一个主函数里.docx_第4页
第4页 / 共11页
亲测银行家和随机算法在一个主函数里.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

亲测银行家和随机算法在一个主函数里.docx

《亲测银行家和随机算法在一个主函数里.docx》由会员分享,可在线阅读,更多相关《亲测银行家和随机算法在一个主函数里.docx(11页珍藏版)》请在冰豆网上搜索。

亲测银行家和随机算法在一个主函数里.docx

亲测银行家和随机算法在一个主函数里

#include"string.h"

#include"iostream"

usingnamespacestd;

 

#defineFALSE0

#defineTRUE1

 

#defineW10

#defineR20

intM;//总进程数

intN;//资源种类

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

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

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

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

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

intRequest[R];//请求资源个数

 

voidshowdata()//函数showdata,输出资源分配情况

{

inti,j;

cout<<"各种资源的总数量(all):

"<

cout<<"";

for(j=0;j

"<

cout<

cout<<"系统目前各种资源可用的数为(available):

"<

cout<<"";

for(j=0;j

"<

cout<

 

cout<<"各进程还需要的资源量(need):

"<

 

cout<<"资源"<<"资源"<<"资源"<

for(i=0;i

for(i=0;i

{

cout<<"进程p"<

";

for(j=0;j

cout<

}

cout<

cout<<"各进程已经得到的资源量(allocation):

"<

cout<<"资源"<<"资源"<<"资源"<

for(i=0;i

{

cout<<"进程p"<

";

for(j=0;j

cout<

}

cout<

};

 

voidchangdata(intk)//函数changdata,改变可用资源和已经拿到资源和还需要的资源的值

{

intj;

for(j=0;j

{

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

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

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

}

};

 

voidrstordata(intk)//函数rstordata,恢复可用资源和已经拿到资源和还需要的资源的值

{

intj;

for(j=0;j

{

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

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

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

}

};

 

intchkerr(ints)//函数chkerr,检查是否安全

{

intWORK,FINISH[W],temp[R];

inti,j,k=0;

for(i=0;i

for(j=0;j

{

WORK=AVAILABLE[j];

i=s;

while(i

{

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

{

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

FINISH[i]=TRUE;

temp[k]=i;

k++;

i=0;

}

else

{

i++;

}

}

for(i=0;i

if(FINISH[i]==FALSE)

{

cout<

cout<<"系统不安全!

!

!

本次资源申请不成功!

!

!

"<

cout<

return1;

}

}

cout<

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

"<

cout<

cout<<"本次安全序列:

";

for(i=0;i";

cout<

return0;

}

 

intchkerr2(ints)//函数chkerr2,检查是否安全

{

intWORK,FINISH[W],temp[R];

inti,j,k=0;

for(i=0;i

for(j=0;j

{

WORK=AVAILABLE[j];

i=s;

while(i

{

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

{

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

FINISH[i]=TRUE;

temp[k]=i;

k++;

i=0;

}

else

{

i++;

}

}

for(i=0;i

if(FINISH[i]==FALSE)

{

cout<

cout<<"本次资源申请成功!

!

!

但系统不安全!

!

!

"<

cout<

return1;

}

}

cout<

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

"<

cout<

cout<<"本次安全序列:

";

for(i=0;i";

cout<

return0;

}

 

voidbank()//银行家算法

{

inti=0,j=0;

charflag='Y';

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

{

i=-1;

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

{

cout<<"请输入需申请资源的进程号(从P0到P"<

):

";

cout<<"p";cin>>i;

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

"<

}

cout<<"请输入进程P"<

"<

for(j=0;j

{

cout<<"资源"<

";

cin>>Request[j];

if(Request[j]>NEED[i][j])

{

cout<<"进程P"<

";

cout<<"申请不合理,出错!

请重新选择!

"<

flag='N';

break;

}

else

{

if(Request[j]>AVAILABLE[j])

{

cout<<"进程P"<

";

cout<<"申请不合理,出错!

请重新选择!

"<

flag='N';

break;

}

}

}

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

{

changdata(i);

if(chkerr(i))

{

rstordata(i);

showdata();

}

else

showdata();

}

else

showdata();

cout<

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

";

cin>>flag;

}

 

}

 

voidrandomallocation()//随机分配算法

{

inti=0,j=0;

charflag='Y';

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

{

i=-1;

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

{

cout<<"请输入需申请资源的进程号(从P0到P"<

):

";

cout<<"p";cin>>i;

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

"<

}

cout<<"请输入进程P"<

"<

for(j=0;j

{

cout<<"资源"<

";

cin>>Request[j];

if(Request[j]>AVAILABLE[j])

{

cout<<"进程P"<

";

cout<<"申请不合理,出错!

请重新选择!

"<

flag='N';

break;

}

}

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

{

changdata(i);

showdata();

chkerr2(i);

 

}

cout<<"是否继续随机分配算法演示,按'Y'或'y'键继续,按'N'或'n'键退出演示:

";

cin>>flag;

 

}

 

}

 

voidmain()//主函数

{

cout<<"※※※※※※※※※※※※※※※※※※※※"<

cout<<"※欢迎使用本系统!

※"<

cout<<"※※"<

cout<<"※====================================※"<

inti=0,j=0,p;

cout<<"输入总进程数:

"<

cin>>M;

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

"<

cin>>N;

cout<<"请输入各类总资源数(all_resource):

"<

for(i=0;i

cin>>ALL_RESOURCE[i];

cout<<"依次输入各进程所需要的最大资源数量(max):

"<

for(i=0;i

{

for(j=0;j

{

do

{

cin>>MAX[i][j];

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

cout<

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

}

}

cout<<"依次输入各进程已经占据的资源数量(allocation):

"<

for(i=0;i

{

for(j=0;j

{

do

{

cin>>ALLOCATION[i][j];

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

cout<

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

 

}

}

//初始化资源数量

for(i=0;i

{p=ALL_RESOURCE[i];

for(j=0;j

{

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

AVAILABLE[i]=p;

if(AVAILABLE[i]<0)

AVAILABLE[i]=0;

}

}

for(i=0;i

for(j=0;j

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

showdata();

do{

cout<

cout<

";

cin>>i;

if(i==2)//m=2表赋值,m==2表判断

bank();

else

randomallocation();

}while(!

((i==1)||(i==2)));

 

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1