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

📄 单资源状态b.cpp

📁 加深了解有关资源申请、避免死锁等概念
💻 CPP
字号:
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
typedef struct Max1
{
	int m_a;
	
}Max;
typedef struct Allocation1
{
	int a_a;
	
}Allocation;
typedef struct Need1
{
	int n_a;
	
}Need;
struct Available1
{
	int av_a;
	
} q;
struct pr
{
	char name;
	Max max;
	Allocation allocation;
	Need need;
	int finishflag;
}p[3];
char na[3];
//*****************************

void init()//读入
{
	printf("各进程的NEED:       各进程的MAX:       各进程的ALLOCATION:\n");
	FILE *fp;
	fp=fopen("input.txt","r+");
	for(int i=0;i<3;i++)
	{

		fscanf(fp,"%c,%d,%d\n",&p[i].name,&p[i].max.m_a,&p[i].allocation.a_a);
		p[i].need.n_a=p[i].max.m_a-p[i].allocation.a_a;
		
		printf("%c:%d",p[i].name,p[i].need.n_a);printf("                  ");
		printf("%c:%d",p[i].name,p[i].max.m_a);printf("                  ");
		printf("%c:%d\n",p[i].name,p[i].allocation.a_a);
		
	}


	fclose(fp);
}

//*****************************
int fenpei()//分配
{
	printf("Available:\n");
	printf("%d\n",q.av_a);
	int finishcnt=0,k=0,count=0;
	for(int j=0;j<3;j++)
		p[j].finishflag=0;

	while(finishcnt<3)
	{
		for(int i=0;i<3;i++)
		{
			if(p[i].finishflag==0&&q.av_a>=p[i].need.n_a)
			{
				q.av_a+=p[i].allocation.a_a;
				
				p[i].finishflag=1;
				finishcnt++;
				na[k++]=p[i].name;
				
				break;
			}
			
		}
		count++;//禁止循环过多
		if(count>5)return 0;
	}
return 1;

}

//*****************************

int shq()
{
	int m,i;
	printf("请输入进程号和请求资源!例如:题目要求:0   1(进程号和资源之间3个空格)\n");
	scanf("%d%d",&m,&i);
	if(i<=p[m].need.n_a)
	{
		if(i<=q.av_a)
		{
			p[m].allocation.a_a+=i;
			
			
			p[m].need.n_a=p[m].max.m_a-p[m].allocation.a_a;
			
	
			printf("各进程的NEED:\n");
			for(int w=0;w<3;w++)
			printf("%c:%d\n",p[w].name,p[w].need.n_a);
			return 1;
		}
		else
			printf("Request>Available\n让%c等待......\n",p[m].name);
	}
	else printf("Request>Need\n让%c等待......\n",p[m].name);
	return 0;

}


//*****************************

void main()
{
	int flag;
	char c;
	cout<<"\n\n\n\n\n\n\n\n\n\t           ";
	for(int i=0;i<30;i++)
		cout<<"*";
        cout<<endl<<"\t"<<"     ---------------操作系统---------------\n"<<endl;
	cout<<endl<<"\t"<<"     ---------------银行家算法-------------\n"<<endl;
	cout<<endl<<"\t"<<"                   姓名:李君益              \n"<<endl;
	cout<<endl<<"\t"<<"                   学号:3103005119              \n"<<endl;
	cout<<endl<<"\t"<<"                   日期:06.7.11             \n"<<endl;
	printf("\t           ");
	for( i=0;i<30;i++)
		printf("*");
	printf("\n\n\n\n\n");
	getch();
	printf("\t    请确认已经在\"input.txt\"中正确输入各进程的有关信息\n");
	getch();
	init();
	q.av_a=12;
	
	
	while(flag)
	{
		for(i=0;i<3;i++)
		{
			q.av_a-= p[i].allocation.a_a;
			
		}
		if(fenpei())
		{
			printf("\n这样配置资源是安全的\n");
			printf("其安全序列是:  ");
			for(int l=0;l<3;l++)
				printf("-->%c",na[l]);
			printf("\n");
			printf("有进程发出Request请求向量吗???(Enter y or Y)\n");
			c=getch();
			if(c=='y'||c=='Y')
			{
				if(shq())continue;
				else break;
			}else flag=0;
			
		}
		else {flag=0;printf("不安全\n");}
		
        getchar();
	}
}

⌨️ 快捷键说明

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