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

📄 bunker.cpp

📁 一个用vc编写的调度算法程序
💻 CPP
字号:
#include<iostream.h>
const int m=3,n=5;//m:资源种类数,n:进程数。
class BUNKer
{
public:
	void input(void);
	int Request(int Requestbuf[m],int i);
private:
	int Available[m];//可利用资源向量。
	int Max[n][m];//最大需求矩阵。
	int Allocation[n][m];//分配矩阵。
	int Need[n][m];//需求矩阵。 
	int Work[m];//工作向量。
	int Finish[n];//可完成标志。
	int Safe(void);
};

int BUNKer::Safe(void)
{
	int i,j;
	for(j=0;j<m;j++)
		Work[j]=Available[j];
	for(i=0;i<n;i++)
		Finish[i]=0;

	do
	{
		for(i=0;i<n;i++)
		{
			j=0;
			if(!Finish[i])
				for(;j<m;j++)
					if(Need[i][j]>Work[j])
						break;
			if(j==m)
				break;
		}
		if(i<n)
		{
			for(j=0;j<m;j++)
				Work[j]+=Allocation[i][j];
			Finish[i]=1;
		}
		else
			break;
	}while(1);
	for(i=0;i<n;i++)
		if(!Finish[i])
			break;
	if(i==n)
		return 1;
	else
		return 0;
}

void BUNKer::input(void)//输入初值。
{
	int i,j;
	for(i=0;i<m;i++)
		cin>>Available[i];
	for(i=0;i<n;i++)
	{
		for(j=0;j<m;j++)
			cin>>Max[i][j];
		for(j=0;j<m;j++)
			cin>>Allocation[i][j];
		for(j=0;j<m;j++)
			cin>>Need[i][j];
	}
}

int BUNKer::Request(int Requestbuf[m],int i)//银行家算法的一次运作。
{
	int j;
	for(j=0;j<m;j++)
		if(Requestbuf[j]>Need[i][j])
			return -1;
	for(j=0;j<m;j++)
		if(Requestbuf[j]>Available[j])
			return 0;
	for(j=0;j<m;j++)
	{
		Available[j]-=Requestbuf[j];
		Allocation[i][j]-=Requestbuf[j];
		Need[i][j]-=Requestbuf[j];
	}
	if(!Safe())
	{
		for(j=0;j<m;j++)
		{
			Available[j]+=Requestbuf[j];
			Allocation[i][j]+=Requestbuf[j];
			Need[i][j]+=Requestbuf[j];
		}
		return 0;
	}
	else
		return 1;
}

void main(void)
{
	BUNKer BUNKer1;
	int i,j;
	int Request[n][m];//资源请求矩阵。
	int Requestbuf[m];
	cout<<"hello!\n";
	BUNKer1.input();
	i=0;
	for(j=0;j<m;j++)
		Requestbuf[j]=Request[i][j];
	switch(BUNKer1.Request(Requestbuf,i))
	{
	case -1:
		cout<<"ERROR!!\n";
		break;
	case 0:
		cout<<"WAIT...\n";
		break;
	case 1:
		cout<<"OK!\n";
		break;
	}
}

⌨️ 快捷键说明

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