死锁避免
死锁避免是在资源动态分配的过程中,防止系统进入不安全的状态,以避免发生死锁。
系统安全状态
安全状态是指系统能按某种进程推进顺序(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
参考书籍: 《王道操作系统》