Vous êtes sur la page 1sur 3

Name:Nirmal Jain.

Roll No. 45

// Banker's Algorithm for deadlock avoidance

#include<iostream>
using namespace std;

int main()
{
int n,r;
cout<<"Total no. of processes n: ";
cin>>n;
cout<<"Resource Types r: ";
cin>>r;

int procSequence[n];

int available[r];
int allocation[n][r];
int max[n][r];
int need[n][r];
bool finish[n] = {false};

int finishCnt = 0;

for(int i=0; i<n; i++)


{
cout<<"Enter Resource values for P:"<<i<<endl;
for(int j=0; j<r; j++)
{
cout<<"Allocation ["<<j<<"] = ";
cin>>allocation[i][j];
cout<<"Max ["<<j<<"] = ";
cin>>max[i][j];

need[i][j] = max[i][j] - allocation[i][j];


}
cout<<endl;
}

cout<<"Process Allocat Max Need\n";


for(int i=0; i<n; i++)
{
cout<<" P"<<i<<" ";
for(int j=0; j<r; j++)
{
cout<<allocation[i][j]<<" ";
}

cout<<" ";
for(int j=0; j<r; j++)
{
cout<<max[i][j]<<" ";
}

cout<<" ";
for(int j=0; j<r; j++)
{
cout<<need[i][j]<<" ";
}
cout<<endl;
}

cout<<"Enter Available Resources:\n";


for(int i=0; i<r; i++)
{
cout<<"Available["<<i<<"] = ";
cin>>available[i];
}

while(finishCnt < n) // Banker's Algorithm


{
bool found_flag = false;
for(int i=0; i<n && finishCnt < n; i++)
{
if(finish[i] == false)
{
int j;
for(j=0; j<r; j++)
{
if(need[i][j] > available[j])
{
break;
}
}

if(j==r)
{
cout<<"Sufficient Resource\n";
cout<<"Process P"<<i<<" finished.\n";
procSequence[finishCnt] = i;
finish[i] = true;
finishCnt++;
cout<<"finishCnt : "<<finishCnt<<endl;
cout<<"New Available = ";
for(int k=0; k<r; k++)
{
available[k] = available[k] + allocation[i][k];
cout<<available[k]<<" ";
}
found_flag = true;
cout<<endl<<endl;
}
}
}

if(found_flag == false)
{
cout<<"System is not in safe state\n";
return 1;
}
}

cout<<"All Processes Finished\n";


cout<<"Sequence : ";
for(int i=0; i<n; i++)
{
cout<<procSequence[i]<<" ";
}
cout<<endl;
return 1;
}

Vous aimerez peut-être aussi