银行家算法Word文档下载推荐.docx

上传人:b****6 文档编号:21325528 上传时间:2023-01-29 格式:DOCX 页数:13 大小:83.07KB
下载 相关 举报
银行家算法Word文档下载推荐.docx_第1页
第1页 / 共13页
银行家算法Word文档下载推荐.docx_第2页
第2页 / 共13页
银行家算法Word文档下载推荐.docx_第3页
第3页 / 共13页
银行家算法Word文档下载推荐.docx_第4页
第4页 / 共13页
银行家算法Word文档下载推荐.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

银行家算法Word文档下载推荐.docx

《银行家算法Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《银行家算法Word文档下载推荐.docx(13页珍藏版)》请在冰豆网上搜索。

银行家算法Word文档下载推荐.docx

sstream>

string>

iomanip>

usingnamespacestd;

#defineM3

#defineN5

//m资源总量

staticintTotal[M]={10,5,7};

//m资源可分配量

staticintAvailable[M];

//进程n对m资源的最大需求量

staticintMax[N][M]=

{

{7,5,3},

{3,2,2},

{9,0,2},

{2,2,2},

{4,3,3}

};

//进程n已分配m资源量

staticintAllocation[N][M]=

{0,1,0},

{2,0,0},

{3,0,2},

{2,1,1},

{0,0,2}

//进程n还需m资源量

staticintNeed[N][M];

//进程的执行序号序列

staticintSecureSequence[N];

//系统可提供给进程继续运行所需的m资源量

staticintWork[M];

//系统是否有足够资源分配给进程n

staticboolFinish[N];

staticvoidsetAllUnfinished()

{

for(inti=0;

i<

N;

i++)

Finish[i]=false;

}

}

staticvoidinitializeSecureSequence()

SecureSequence[i]=-1;

staticvoidcountNeed()

for(intj=0;

j<

M;

j++)

{

Need[i][j]=Max[i][j]-Allocation[i][j];

}

staticvoidcountAvailable()

inttemp;

for(intj=0;

temp=0;

for(inti=0;

temp+=Allocation[i][j];

Available[j]=Total[j]-temp;

staticvoidaddSecureSequence(intn)

inti=0;

while(i<

N&

&

SecureSequence[i]!

=-1)

i++;

if(i<

N)

SecureSequence[i]=n;

stringto_string(inti)

stringstreamints;

stringtemps;

ints<

<

i;

ints>

>

temps;

//int转换为string

returntemps;

stringtemps;

intSecurityAlgorithm(intPi);

stringBankersAlgorithm(intPi,constint(&

Request)[M])

intj;

for(j=0;

j++)//将Pi请求资源分配给Pi,出错则提示并结束当前算法

if(Request[j]>

Need[Pi][j])

return"

出错!

请求资源量大于预计最大值!

"

;

Available[j])

尚无足够资源!

Available[j]-=Request[j];

Allocation[Pi][j]+=Request[j];

Need[Pi][j]-=Request[j];

if(SecurityAlgorithm(Pi)==1)

return"

进程"

+to_string(Pi)+"

请求资源成功!

elseif(SecurityAlgorithm(Pi)==0)

所有进程均已执行结束进程!

else//检查结果为不安全时回滚

for(j=0;

Available[j]+=Request[j];

Allocation[Pi][j]-=Request[j];

Need[Pi][j]+=Request[j];

若为进程"

分配资源,则系统处于不安全状态,令"

等待"

return"

unknownerrorfromBankersAlgorithm!

Pi="

+Pi;

intSecurityAlgorithm(intPi)//检查对Pi进程分配资源后是否还有完整安全序列

inti,j,tempi;

booltempb;

for(intk=0;

k<

k++)

Work[k]=Available[k];

tempi=0;

for(i=0;

tempb=false;

if(Finish[i]==false)

for(j=0;

{

if(Need[i][j]<

=Work[j])

{

tempb=true;

}

else

tempb=false;

break;

}

if(tempb==true)

//如果Pi进程分配资源后仍有安全进程,表明Pi可以执行完,返还Pi已分配资源并将Pi进程加入完成序列,返回1

for(intk=0;

Available[k]+=Allocation[Pi][k];

Finish[Pi]=true;

addSecureSequence(Pi);

return1;

else

tempi++;

if(tempi==N)//所有进程Finish==true

return0;

return-1;

voidoutput(intPi)//输出资源分配情况

inti,j;

cout<

setw(10)<

Max"

setw(15)<

Allocation"

Need"

Available"

endl;

4;

cout<

"

cout<

setw(3)<

char('

A'

+j);

endl<

P"

Pi<

Max[Pi][j];

Allocation[Pi][j];

Need[Pi][j];

Available[j];

voidoutputAll()

3;

Max[i][j];

Allocation[i][j];

Need[i][j];

intmain()

countAvailable();

countNeed();

initializeSecureSequence();

setAllUnfinished();

整体资源如下:

outputAll();

inti;

intPi;

intRequest[M];

\n\nAvailable:

+to_string(Available[i]);

\n\n请输入要分配资源的进程号:

cin>

Pi;

请输入进程对资源"

+to_string(i)+"

的需求数目:

cin>

Request[i];

\n尝试为进程"

分配资源"

output(Pi);

BankersAlgorithm(Pi,Request)<

SecureSequence[N-1]==-1&

N*N;

Pi=i%N;

if(Finish[Pi]==false)

output(Pi);

BankersAlgorithm(Pi,Need[Pi])<

\n存在安全序列"

->

+to_string(SecureSequence[i]);

\n程序即将退出,"

system("

pause"

);

return0;

四、程序运行结果

五、实验体会

通过本次实验,让我更加了解了银行家算法的过程。

即多个进程同时运行时,系统会根据各类系统资源的最大需求和各类系统剩余资源为进程安排安全序列,使得系统能快速且安全地运行进程,从而不至于发生死锁。

而银行家算法是避免死锁的主要方法,其思路在很多方面是值得我们大家所学习的。

上机实验是对我们课堂上理论知识的巩固和加深,当然只有上课认真听讲,弄懂其算法,才能在实践的过程中加以应用。

上机练习还能提高我们的编程能力。

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

当前位置:首页 > 经管营销 > 销售营销

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

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