C++实现操作系统银行家算法——死锁避免

死锁避免

死锁避免是在资源动态分配的过程中,防止系统进入不安全的状态,以避免发生死锁。

系统安全状态

安全状态是指系统能按某种进程推进顺序(P1,P2,…,Pn)为每个进程Pi分配其所需的资源,直至满足每个进程对资源的最大需求,使每个进程都可以顺序完成。此时称P1,P2…,Pn为安全序列。

下面是一个资源分配表。

在这里插入图片描述
下面我们将把这个资源分配表的数据输入到程序中,然后我们输入测试序列,程序将判断是否为安全序列。

代码如下

#include<iostream>
#include<vector>
using namespace std;

/*Max:最大需求矩阵,Allocation:分配矩阵,Available:可用资源向量,Sequence:测试序列*/
bool BankersAlgorithm(vector<vector<int>> Max, vector<vector<int>> Allocation, vector<int> Available, vector<int> Sequence)
{
	int ProcessCount = Sequence.size();                       //进程数
	int SourceCount = Available.size();                       //资源种类数  
	int count=0;                                              //循环变量
	while (count < ProcessCount)
	{
		int curr = Sequence[count];
		vector<int> temp(SourceCount);
		for (int i = 0; i < SourceCount; i++)
		{
			temp[i] = Available[i] + Allocation[curr][i];
			if (temp[i] < Max[curr][i])
				return false;                                  //如果有一项不满足就判定为不安全序列
		}
		Available = temp;
		count++;
	}
	return true;
}

int main()
{
	int ProcessCount,SourceCount;
	cout << "请输入进程数" << endl;
	cin >> ProcessCount;
	cout << "请输入资源数" << endl;
	cin >> SourceCount;

	vector<vector<int>> Max(ProcessCount,vector<int>(SourceCount));//最大需求矩阵
	vector<vector<int>> Allocation(ProcessCount, vector<int>(SourceCount));//分配矩阵
	vector<int> Available(SourceCount);//可用资源向量
	vector<int> Sequence(ProcessCount);//测试序列
	
	cout << "请输入可用资源向量" << endl;
	for (int i = 0; i < SourceCount; i++)
		cin >> Available[i];


	cout << "请输入最大需求矩阵" << endl;
	for (int i = 0; i < ProcessCount; i++)
	{
		for (int j = 0; j < SourceCount; j++)
			cin >> Max[i][j];
	}


	cout << "请输入分配矩阵" << endl;
	for (int i = 0; i < ProcessCount; i++)
	{
		for (int j = 0; j < SourceCount; j++)
			cin >> Allocation[i][j];
	}

    while(1)
	{
		cout << "请输入序列" << endl;
		for (int i = 0; i < ProcessCount; i++)
			cin >> Sequence[i];
			
		bool ans = BankersAlgorithm(Max, Allocation, Available, Sequence);
		cout << ans<<endl;
	}

	system("pause");
}

运行结果
在这里插入图片描述
开发环境:Visual Studio 2017
参考书籍: 《王道操作系统》

发布了9 篇原创文章 · 获赞 2 · 访问量 655

猜你喜欢

转载自blog.csdn.net/qq_41195985/article/details/104266068