///实验名称:死锁的避免--银行家算法/
///实验时间: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< }
}
函数结束