银行家算法 实验

《操作系统》实验
实验二 银行家算法

一.实验目的
1、理解死锁的定义、原因和必要条件。
2、掌握银行家算法和安全性算法的基本思想。
3、能够编程模拟利用银行家算法和安全性算法避免死锁的实现过程。
二.使用的设备和仪器
计算机+Windows XP +Visual C++6.0
三.实验内容及要求
编写一程序,能够模拟银行家算法和安全算法来避免死锁。假设系统资源有A、B、C三种,可以运行4个进程。该程序具备的基本功能为:
1、程序可以输入3种资源的数目,4个进程对3种资源的最大需求量、已分配量和需求量。
2、能够判断某一时刻系统是否处于安全状态,如果处于安全状态能够给出安全序列。
3、当某进程提出资源申请时,能够判断是否能把资源分配给申请进程。

#include
#include
#include
#define index_max 5

//线程
typedef struct PCB{
	int id;
	int Max[3];
	int allocation[3];
	int Need[3];
}PCB;
PCB  MY_PCB[index_max]={0};//定义max个线程初始化为0

//初始化资源数量
int Availabl[3]={2,3,3};

//分配
void distribution(){
	for(int i=0;i<index_max;i++){
		MY_PCB[i].id=i+1;
		printf("请输入第%d个进程的MAX(A B C)用空格隔开\n",i+1);
		scanf("%d %d %d",&MY_PCB[i].Max[0],&MY_PCB[i].Max[1],&MY_PCB[i].Max[2]);
		getchar();
		printf("请输入第%d个进程的allocation(A B C)用空格隔开\n",i+1);
		scanf("%d %d %d",&MY_PCB[i].allocation[0],&MY_PCB[i].allocation[1],&MY_PCB[i].allocation[2]);
		getchar();
		printf("请输入第%d个进程的Need(A B C)用空格隔开\n",i+1);
		scanf("%d %d %d",&MY_PCB[i].Need[0],&MY_PCB[i].Need[1],&MY_PCB[i].Need[2]);
		getchar();
	}
	printf("请输入剩下的Availabl的资源数(A B C)用空格隔开\n");
	scanf("%d %d %d",&Availabl[0],&Availabl[1],&Availabl[2]);
	getchar();


}
//核心算法
void algorithm(){
	int l=0;
	int r=0;//双指针
	int falg=0;//标志
	while(l<=r){
		if(l>=index_max|| falg==1) break;
		if(r>=index_max){ r=l; falg=1; }
		int a = MY_PCB[r].Need[0]<=Availabl[0];
		int b = MY_PCB[r].Need[1]<=Availabl[1];
		int c = MY_PCB[r].Need[2]<=Availabl[2];

		if(a&&b&&c){
			PCB tep=MY_PCB[l];
			MY_PCB[l]=MY_PCB[r];
			MY_PCB[r]=tep;
			/*******************/
			Availabl[0]+=MY_PCB[l].allocation[0];
			Availabl[1]+=MY_PCB[l].allocation[1];
			Availabl[2]+=MY_PCB[l].allocation[2];
			l++;
			r=l;
		}else{
			r++;
		}
	}//while
	if(falg==1){
		printf("此时线程不安全");
		return;//退出;
	}else{
		printf("此时线程安全可,可按照如下线程执行:\n");
		for(int i=0;i<index_max-1;i++){
			printf("%d-->",MY_PCB[i]);
		}
		printf("%d",MY_PCB[index_max-1]);
	}

}


int main(){
	printf("银行家算法======= 班级:计科204 学号:208612 姓名:奉海龙\n");
	distribution();
	algorithm();
	getchar();
	return 0;
}

截图:
银行家算法 实验_第1张图片

你可能感兴趣的:(八股文专栏,算法,c语言,单片机)