Write a C program to implement banker’s algorithm for deadlock detection.
Program:
#include <stdio.h>
int main()
{
int found,flag,l,p[4][5],tp,tr,c[4][5],i,j,k=1,m[5],r[5],a[5],temp[5],sum=0;
printf("Enter total no of processes:\n");
scanf("%d",&tp);
printf("Enter total no of resources:\n");
scanf("%d",&tr);
printf("Enter claim (Max. Need) matrix\n");
for(i=1;i<=tp;i++)
{
printf("process %d:\n",i);\*Display claim matrix*\
for(j=1;j<=tr;j++)
scanf("%d",&c[i][j]);
}
printf("Enter allocation matrix\n");
for(i=1;i<=tp;i++)
{
printf("process %d:\n",i);\*Display allocation matrix*\
for(j=1;j<=tr;j++)
scanf("%d",&p[i][j]);
}
printf("Enter resource vector (Total resources):\n");
for(i=1;i<=tr;i++)
{
scanf("%d",&r[i]);
}
printf("Enter availability vector (available resources):\n");
for(i=1;i<=tr;i++)
{
scanf("%d",&a[i]);
temp[i]=a[i];\*copy content of a[i] into temp[i]*\
}
\*Banker’s algorithm*\
for(i=1;i<=tp;i++)
{
sum=0;
for(j=1;j<=tr;j++)
{
sum+=p[i][j];\*Add allocation matrix *\
}
if(sum==0)
{
m[k]=i;
k++;
}
}
for(i=1;i<=tp;i++)
{
for(l=1;l<k;l++)
if(i!=m[l]) \*if value of i is not equal to m[l] then set flag=1*\
{
flag=1;
for(j=1;j<=tr;j++)
if(c[i][j]<temp[j])\*if claim matrix less than temp[j] then set flag=0*\
{
flag=0;
break;
}
}
if(flag==1)
{
m[k]=i;
k++;
for(j=1;j<=tr;j++)
temp[j]+=p[i][j];\*Add allocation matrix with temp[i][j]*\
}
}
printf("deadlock causing processes are:");
for(j=1;j<=tp;j++)
{
found=0;\*Deadlock occurred*\
for(i=1;i<k;i++)
{
if(j==m[i])\\
found=1;\*Deadlock not occurred*\
}
if(found==0)
printf("%d\t",j);\*Display deadlock causing processes*\
}
return 0;
}