Untitled
unknown
c_cpp
a year ago
2.7 kB
9
Indexable
#include <iostream>
#include <vector>
using namespace std;
// Number of processes and resources
const int P = 5;
const int R = 3;
// Class representing the Banker's Algorithm
class BankersAlgorithm {
private:
vector<int> processes;
vector<int> available;
vector<vector<int>> maxm;
vector<vector<int>> allocation;
vector<vector<int>> need;
public:
BankersAlgorithm(vector<int> procs, vector<int> avail,
vector<vector<int>> maxMatrix, vector<vector<int>> allocMatrix)
: processes(procs), available(avail), maxm(maxMatrix), allocation(allocMatrix) {
need.resize(P, vector<int>(R, 0));
calculateNeed();
}
// Function to calculate the Need matrix
void calculateNeed() {
for (int i = 0; i < P; i++) {
for (int j = 0; j < R; j++) {
need[i][j] = maxm[i][j] - allocation[i][j];
}
}
}
// Function to check if the system is in a safe state
bool isSafe() {
vector<bool> finish(P, false);
vector<int> work = available;
vector<int> safeSeq;
int count = 0;
while (count < P) {
bool found = false;
for (int i = 0; i < P; i++) {
if (!finish[i]) {
bool canAllocate = true;
for (int j = 0; j < R; j++) {
if (need[i][j] > work[j]) {
canAllocate = false;
break;
}
}
if (canAllocate) {
for (int k = 0; k < R; k++) {
work[k] += allocation[i][k];
}
safeSeq.push_back(processes[i]);
finish[i] = true;
found = true;
count++;
}
}
}
if (!found) {
cout << "System is not in a safe state" << endl;
return false;
}
}
cout << "System is in a safe state.\nSafe sequence is: ";
for (int i : safeSeq) {
cout << i << " ";
}
cout << endl;
return true;
}
};
int main() {
vector<int> processes = {0, 1, 2, 3, 4};
vector<int> avail = {3, 3, 2};
vector<vector<int>> maxm = {
{7, 5, 3},
{3, 2, 2},
{9, 0, 2},
{2, 2, 2},
{4, 3, 3}};
vector<vector<int>> allot = {
{0, 1, 0},
{2, 0, 0},
{3, 0, 2},
{2, 1, 1},
{0, 0, 2}};
BankersAlgorithm banker(processes, avail, maxm, allot);
banker.isSafe();
return 0;
}
Editor is loading...
Leave a Comment