操作系统——避免死锁的银行家算法

1. 先附上源程序(运行程序前请将注释的文件内容创建名为process_info.txt的文件,并放在代码所在目录下)

#include
#include
using namespace std;
typedef int Status;
/*FilePath路径下文件内容(新创建txt文件并更改FilePath路径) 
--------------------------------------------- 
NUM(PROCESS_AND_RESOURCE)
5 3
AVAILABLE
3 3 2
MAX
7 5 3
3 2 2
9 0 2
2 2 2
4 3 3
ALLOCATION
0 1 0
2 0 0
3 0 2
2 1 1
0 0 2
--------------------------------------------- */
//--------------------------宏定义----------------------------------------- 
#define OTHER_ERROR -1 		//其他请求请求资源失败的原因(这里没有用到) 
#define OVER_NEED 0			//资源需求申请超出最大需求值
#define RES_NOT_ENOUGH 1	//系统无足够资源
#define NOT_SAFE 2			//未通过安全性算法检测 
#define OK 3				//通过安全性算法检测,且无其他错误,请求资源成功
//--------------------------函数声明---------------------------------------- 
void ReadProcessInfo();				//读取进程的所有信息
int SafetyJudge();					//安全性检测算法
int NeedNGWork(int Work[],int row);	//用于比较Need[row,j]和Work[j]
Status Request_BankerALG(int Request [],int x);	//判断能否请求成功_银行家算法
void Display();//进程信息和当前系统资源状态显示
void Request();//模拟进程申请资源的过程,并检测能否成功申请
void showMenu();//菜单显示 
//-----------------------------全局变量--------------------------------------
char FilePath[40]="process_info.txt";	
//进程和系统资源信息文件存储位置 
int Num_Process;	//Num_Process为当前系统的进程数量
int Num_Resource;	//Num_Resource为当前系统可提供的资源种类数量
bool *Finish;		//用于安全性检测算法中进程能否顺利完成 
int *Available,**MAX,**Allocation,**Need,*Work;
int Readed=0;		//用于标志是否成功读取文件
int *Sequence;		//用于存储安全序列 
//---------------------------------------------------------------------------
int main()
{
	int select=0;
	while(select!=-1)
	{
		showMenu();
		cout<<"----->>请输入要进行的操作...(退出请输入-1)"<>select;
		switch(select)
		{
			case 1:
			{
				int yes=0;
				if(Readed)
				{
					cout<<"--->>是否重新读取进程和系统资源信息?(1-是/0-否)"<>yes;
					if(yes)
					{
						ReadProcessInfo();
						Readed=1;
						cout<<"数据已更新!"<Work[i])
			break;
	if(iNeed[x][i])
	return OVER_NEED; //资源需求申请超出最大需求值
	for(i=0;iAvailable[i])
	return RES_NOT_ENOUGH;	//系统无足够资源
	for(i=0;i>x;
	cout<<"--->>请输入进程"<>request[i];
	Status result=Request_BankerALG(request,x);
	switch(result)
	{
		case OVER_NEED:cout<<"资源申请失败(失败原因:申请的资源量超出进程当前最大需求量!)"<

2. 结果截图

操作系统——避免死锁的银行家算法_第1张图片

操作系统——避免死锁的银行家算法_第2张图片

操作系统——避免死锁的银行家算法_第3张图片

操作系统——避免死锁的银行家算法_第4张图片

操作系统——避免死锁的银行家算法_第5张图片

操作系统——避免死锁的银行家算法_第6张图片

操作系统——避免死锁的银行家算法_第7张图片

你可能感兴趣的:(原创教程,操作系统,算法)