银行家算法c++版

   搞了几天银行家算法,终于搞定了。知识还是得从基础抓起啊。

  所谓银行家算法,主要是解决操作系统的进程调度的,解决并发进程的死锁问题。目前,大部分操作系统已经不采用此算法,但此算法去还是很经典的。算法思想非常简单,便于理解。但是,在实现时,发现出现了各种各样的问题。

  银行家算法,主要有两部分组成。一是安全检测,其次,就是进程的调度。

   银行家算法是死锁避免的经典算法 ,其核心思想是:进程动态地申请资源,每次申请资源时系统都执行安全状态检查算法判断本次申请是否会造成系统处于不安全状态,如果不安全则阻塞进程;如果安全状态,则完成资源分配。
   安全状态检查算法 的思想是找到一个安全序列,使所有进程都能执行完毕。如果找到,则处于安全状态,否则为不安全状态。
书中的伪代码,我根据他用c++实现了一下。本人水平较低,出现错误,望各位见谅。并能更正提出。
#include
#include
using namespace std;
#define m 3     //资源种类数 
#define n 4     //进程数
struct state{
	int resource[m]; //资源总数
	int available[m]; // 目前可用资源数
	int claim[n][m]; //各进程所需资源数
	int alloc[n][m]; // 进程已申请资源数
};
int p[n];   //进程执行队列
int request[m];//请求资源数
bool safe(state S)
{
	int currentavail[m];  //测试可用资源
	bool rest[n]={false}; //进程状态数组,记录进程是否阻塞
	int i,j,k,l=0;
	for(i=0;i>i;
	for(j=0;j>request[j];
	}
	for(j=0;js.claim[i][j])
		{
			cout<<"申请资源大于他所需要的资源\n";
			cout<<"分配不合理,不分配\n";
			return false;
		}
		else
		{
			if (s.alloc[i][j]+request[j]>s.claim[i][j])
			{
				cout<<"申请资源数大于系统现在可以利用资源数\n";
				cout<<"分配出错,不给予分配\n";
				return false;
			}
		}
	}
	for(j=0;j>S.resource[i];
	cout<<"目前可用的资源数\n";
	for(i=0;i>S.available[i];
	cout<<"各进程已占资源数\n";
	for(i=0;i>S.alloc[i][j];
	cout<<"各进程所需最大资源数\n";
	for(i=0;i>S.claim[i][j];
	banker(S);

}

 

 

你可能感兴趣的:(银行家算法c++版)