python银行家算法代码_死锁避免——银行家算法

///实验名称:死锁的避免--银行家算法/

///实验时间:2009年10月18日完成,在VC++6.0和WINDOWS XP环境下能够运行成功。

#include

#include

#include

using namespace std;

const unsigned short c = 3;//资源类数

const unsigned short t = 5;//进程数

Print(); //用于打印输出表格的函数

void Input();//用于输入的函数

void tryfenpei(int i);//试分配函数

void refenpei(int i);//恢复数据函数

void checksafe(int s);//安全检测函数

//定义初始化数组

int Available[c],

Max[t][c],

Allocation[t][c],

Need[t][c],

Request[c];

int in;//用户选择的线程号码

/

int main(int argc, char *argv[])

{

int i;

char ch;

cout<

Print();//打印输出相关数据表函数

cout<

do

{

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

{

cout<

cout<

cin>>in;

cout<

for(i=0;i cout< for(i=0;i {

cin>>Request[i];

while(Request[i]>Need[in][i])

{

cout<>Request[i];

}

while(Request[i]>Available[i])

{

cout<>Request[i];

}

}

//cout<

Sleep(1000);

cout<

checksafe(in);//安全性检测函数

cout<

}

else

if(ch=='N'||ch=='n')

{

cout<

}

}while(cin>>ch);

return 0;

}///主函数结束

打印输出表格函数

Print()

{

int i,j;

cout<

cout<

{

cout<

{

cout<

cout<

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

{

cout<

cout<

if(i==0)

{

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

{

cout<

cout<

}

if(i>0)

{

cout<

}

cout< }

cout<

}///函数结束/

///数据输入函数//

void Input()

{

for(int j=0;j {

cout<>Available[j];

// cout<>Max[l][m];

//cout<>Allocation[l][m];

//cout<

void tryfenpei(int i)

{

for(int f=0;f {

Available[f] = Available[f] - Request[f];

Allocation[i][f] = Allocation[i][f] + Request[f];

Need[i][f] = Need[i][f]-Request[f];

//cout重新分配函数//

void refenpei(int i)

{

for(int f=0;f {

Available[f] = Available[f] + Request[f];

Allocation[i][f] = Allocation[i][f] - Request[f];

Need[i][f] = Need[i][f]+Request[f];

//cout//安全性检测函数//

void checksafe(int s)

{

int Work,flag,temp[t];

bool Finish[t];

int i,j,l=0,k=0;

for(i=0;i for(j=0;j<3;j++)

{

Work=Available[j];//cout<

if(Finish[i]==true) l++;//用l是否达到5来判断这条进程A类或者B类是否通过安全检测,C类没有经过这里

}

if(l==5)//一共有三类资源A B C,一条进程下面的安全性检测只检测了A类。如果A类通过了,那么还要判断B类,C类。否则不用

{

for(i=0;i

}

i=s;//s传递进来赋给i

while(i {

if (Finish[i]==false&&Need[i][j]<=Work)

{

Work=Work+Allocation[i][j];

Finish[i]=true;

temp[k]=i;//cout<

i=(i+1)%t;//从用户选择的进程开始对每个进程都要检测

}

else i=(i+1)%t;//这个设置很重要

}

}

for(i=0;i {

if(Finish[i]==false)

{

flag=1;//标记

}

}

if(flag==1)

{

cout<

refenpei(in);

cout<

Print();

}

else

{

cout<

for(i=0;i cout<

Sleep(1000);

cout< cout<

cout<

Print();

cout< }

}

函数结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值