栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

银行家安全算法

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

银行家安全算法

一、预备知识

1.死锁的相关知识。

2.银行家算法。

3.系统安全性检查。

二、目的

1.加深了解有关资源申请、避免死锁等概念。

2.体会和了解死锁和避免死锁的具体实施方法。

三、要求

1.理解死锁的概念以及产生死锁的原因。

2.了解检测状态安全性的方法。 

3.掌握利用银行家算法避免死锁的做法。

四、实验内容

银行家算法是避免死锁的一种重要方法,本实验要求编写和调试一个简单的银行家算法程序。

1.设计进程对各类资源最大申请表示及初值的确定。

2.设定系统提供资源的初始状况。

3.设定每次某个进程对各类资源的申请表示。

4.编制程序,依据银行家算法,决定其资源申请是否得到满足。

5.显示资源申请和分配时的变化情况。

五、思路

1.先找出安全序列

2.后申请资源在找出安全序列

#include 
#include
#include
using namespace std;


vector all; //资源总数 
vector > mx;//所需最大值 
vector > allocation;//已分配 
vector > need;//还需要 
vector available;//剩余资源 
int m,n;//进程数,资源种类数;


void Max(vector >& mx) {
	cout << "请输入各进程最多还需要的资源数 按照" << m << "*" << n << "矩阵输入" << endl;

	for (int i = 0; i < m; i++) {
		vector b;//每一个进程的还需资源数组
		int resource;//还需的资源
		for (int j = 0; j < n; j++) {
			cin >> resource;
			b.push_back(resource);
		}
		mx.push_back(b);//将资源数组放入所需资源素组
	}
	
}

void Allocation(vector >& allocation) {
	cout << endl<<"请输入各进程已分配的资源数 按照" << m << "*" << n << "矩阵输入" << endl;

	for (int i = 0; i < m; i++) {
		vector b;//每一个进程的还需资源数组
		int resource;//还需的资源
		for (int j = 0; j < n; j++) {
			cin >> resource;
			b.push_back(resource);
		}
		allocation.push_back(b);//将资源数组放入所需资源素组
	}
	
}

void Available(vector &all,vector &available) {
	cout << endl << "请输入每个资源的总数目 " << endl;
	int resource;
	
	for (int i = 0; i < n; i++)
	{
		cin >> resource;
		all.push_back(resource);
	}
	
	
	for(int l=0;l mx, vector > allocation,vector >&need) {
	need.resize(m * n);
	vectort(n, 0);
	vector >T(m,t);
	need = T;
	for (int i = 0; i < m; i++) {
		
		for (int j = 0; j < n; j++) {
			need[i][j]= mx[i][j]-allocation[i][j];
		}
		
	}

}



bool safe(vector &available, vector >& allocation, vector >& need,int id) {
	
	vector work = available;
	vectorFinish(m, false);
	int mark1=0;
	int mark2=0;
	int mark3 = 0;
	int *route=new int[m];
	
	if(id==-1){
		
		while(true){
	        
	        for(int z=0;z";
		        }
		        
		        cout<=0 && id=0 &&id";
        }
        cout<<"nn";
        return true;
	}
}


void request(vector &available,vector > &allocation,vector > &need){

	int a;
	vector Request;
	int id;
	
	cout<<"请输入申请资源的进程号"<>id;
	while(id<0||id>m){
		cout<<"该进程号不合法,请重新输入"<>id;
	} 
	
		for(int j=0; j>a;
            Request.push_back(a);
            while(Request[j]>need[id][j])///请求资源大于进程所需资源
            {
                cout<<"该资源申请不合理,无法进行分配资源,请重新输入"<>a;
                Request.push_back(a);
            }
            while(Request[j]>available[j])///可利用的资源不够用
            {
                    ///请求的该资源类型的数目大于其可用资源数目
                    cout<<"该资源申请不合理,无法进行分配资源,请重新输入"<>a;
                    Request.push_back(a);
            }
			
        }
	
    
    for(int i=0;i>& mx,vector &available,vector > &allocation,vector > &need){

	Max(mx);//输入mx
	Allocation(allocation);//输入allocation
	Available(all,available);//输入available
	Need(mx,allocation,need);//用于计算need
}


int main() {
	
	char fly;//判断是进行申请资源后找安全序列或者直接找安全序列 
	int id;//进程号 
	bool t;//接取safe返回值 
	
	cout<< "请输入进程数 ";
	cin >> m;
	cout << endl<<"请输入资源种类数 ";
	cin >> n;

	cout<<"是否需要申请资源,请输入Y/N"<>fly;
	
	
	if(fly=='N'||fly=='n'){
		Init(mx,available,allocation,need);//初始化 
	    cout<<"请问当系统处于T0状态时,系统是否处于安全状态"; 
	    t=safe(available,allocation, need,-1);
	
	
	    if(t==true){
	        cout<<"该系统状态处于安全状态"< 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/953989.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号