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

📄 osfunction.h

📁 一个很好用的银行家算法
💻 H
字号:
#include"DataStructure.h"
#include"iostream.h"
void Init(Process P[M],Available &V){                    //初始化函数
	for(int i=0;i<M;i++)
	{
		cout<<"请输入第"<<i<<"进程当前情况,先为Need,后为ALLOCATION:"<<endl;
		cin>>P[i].N.n_a>>P[i].N.n_b>>P[i].N.n_c>>P[i].N.n_d;
		cin>>P[i].L.l_a>>P[i].L.l_b>>P[i].L.l_c>>P[i].L.l_d;
		P[i].Finish=false;
	}
    cout<<"请输入(a-d)各资源可用数,即Available:"<<endl;
    cin>>V.v_a>>V.v_b>>V.v_c>>V.v_d;
}
/*void Banker(Process P[M],Available V,Request R){        //银行家算法
	if(R.r_a<=V.v_a&&R.r_b<=V.v_b&&R.r_c<=V.v_c&&R.r_d<=V.v_d)
	{
		V.v_a-=R.r_a;
		V.v_b-=R.r_b;
		V.v_c-=R.r_c;
		V.v_d-=R.r_d;
		P[s].L.l_a+=R.r_a;
		P[s].L.l_b+=R.r_b;
		P[s].L.l_c+=R.r_c;
		P[s].L.l_d+=R.r_d;
		P[s].L.l_a-=R.r_a;
		P[s].L.l_b-=R.r_b;
		P[s].L.l_c-=R.r_c;
		P[s].L.l_d-=R.r_d;
	}
}*/
bool Subsecurity(Process P[M],Available V){          //子安全性分析
     int i=0;
	 int flag=0;
	 int tap=0;
	 while(i<M){
		 if(P[i].Finish==false&&P[i].N.n_a>V.v_a&&P[i].N.n_b>V.v_b&&P[i].N.n_c>V.v_c&&P[i].N.n_d>V.v_d){
			flag++;
			i++;
		 }
		else 
			i++;
	 }
	 for(i=0;i<M;i++)
		 if(P[i].Finish==false)
			 tap++;
	 if(flag==tap)
		 return true;
	 else 
		 return false;
}
bool Security(Process P[M],Available V){               //安全性分析
	int sign=0;
	while(sign!=M){
        for(int i=0;i<M;i++){
            if(P[i].Finish==false&&P[i].N.n_a<=V.v_a&&P[i].N.n_b<=V.v_b&&P[i].N.n_c<=V.v_c&&P[i].N.n_d<=V.v_d){
			   V.v_a=V.v_a+P[i].L.l_a;
			   V.v_b=V.v_b+P[i].L.l_b;
			   V.v_c=V.v_c+P[i].L.l_c;
			   V.v_d=V.v_d+P[i].L.l_d;
			   P[i].Finish=true;
			   sign++;
			}
		}
	    if(sign==M) return true;
		   else if(Subsecurity(P,V))
			       return false;
	}
}

⌨️ 快捷键说明

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