⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 banker.txt

📁 操作系统中解决死锁的银行家算法的演示算法
💻 TXT
字号:
#include <iostream.h>
#include <stdio.h>

int available[3]={3,3,2},max[5][3]={7,5,3,3,2,2,9,0,2,2,2,2,4,3,3};
int allocation[5][3]={0,1,0,2,0,0,3,0,2,2,1,1,0,0,2};
int	need[5][3]={7,4,3,1,2,2,6,0,0,0,1,1,4,3,1};

bool needcheck(int i,int work[3])//检查need[i,j]<=work[j]
{
	for(int m=0;m<3;m++)
	{
		if(need[i][m]>work[m])
			return 0;
	}
	return 1;
}

void workwrite(int i,int work[3])//修改work[3]
{
	for(int m=0;m<3;m++)
	{
		work[m]=work[m]+allocation[i][m];
	}
}

void showfinsh(int finsh[5])//显示finsh[5]的数值(调试用)
{
	for(int i=0;i<5;i++)
	{
		cout<<finsh[i];

	}
}

bool finshcheck(int finsh[5])//检查finsh[5]是否全为1
{
	for(int i=0;i<5;i++)
	{
		if(finsh[i]==0)
			return 0;
	}
	return 1;
}

bool safecheck()//安全检查函数
{
	int work[3],i,p,m=0;
	int finsh[5]={0,0,0,0,0};
	int order[5]={-1,-1,-1,-1,-1};

	for(i=0;i<3;i++)
	{
		work[i]=available[i];
	}

	for(p=0;p<5;p++)
	{
		for(i=0;i<5;i++)
		{
			if(finsh[i]==0&&needcheck(i,work))
			{
				workwrite(i,work);
				finsh[i]=1;
				order[m++]=i;
				
			}
			
		}
	}
	//showfinsh(order);
	if(finshcheck(finsh))
	{
		//cout<<"系统是安全的"<<endl;
		return 1;
	}
	else
	{
		//cout<<"系统不安全"<<endl;
		return 0;
	}
}

bool requestneedcheck(int i,int request[3])//request[]和need[]比较
{
	for(int j=0;j<3;j++)
	{
		if(request[j]>need[i][j])
			return 0;
	}
	return 1;
}

bool requestavacheck(int i,int request[3])//request[]和availiable[]比较
{
	for(int j=0;j<3;j++)
	{
		if(request[j]>available[j])
			return 0;
	}
	return 1;
}

bool Request()//请求资源函数
{
	int pro,request[3],i;
	cout<<"请输入请求资源的进程号:";
	cin>>pro;

	for(i=0;i<3;i++)
	{
		cout<<"请输入请求的资源"<<i<<"的数目:";
		cin>>request[i];
	}

	if(requestneedcheck(pro,request))
	{
		if(requestavacheck(pro,request))
		{
			for(i=0;i<3;i++)
			{
				available[i]-=request[i];
				allocation[pro][i]+=request[i];
				need[pro][i]-=request[i];
			}
			if(safecheck())
			{
				cout<<"分配成功"<<endl;
				return 1;
			}
			else
			{
				cout<<"分配失败,请等待"<<endl;
				available[i]+=request[i];
				allocation[pro][i]-=request[i];
				need[pro][i]+=request[i];
				return 0;
			}
		}
		else
		{
			cout<<"无足够资源,等待"<<endl;
			return 0;
		}
	}
	else
	{
		cout<<"资源超过最大"<<endl;
		return 0;
	}
	
}

void main()
{
	if(safecheck())
	{
		while(1)
		{
			Request();
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -