Computer systems are with full of different types of resourc
Computer systems are with full of different types of resources that can only be used by one process at a time. For many applications, most of the processes need exclusive access to not one, but several resources. So, chances of deadlocks are more in such situations. Write a program in C to implement the deadlock detection algorithm with single resource of each type. The output of the program should indicate that whether there is a deadlock or not. In case there is a deadlock in the system, the program should identify all processes which are deadlocked.
Thank You
Solution
For deadlock detection banker\'s algorithm is best example.So here we implementing banker;s algorithm.
/* Banker\'s Algorithm*/
#include<stdio.h>
int main()
 {
    int fnd,flag,L,pro[4][5],np,nr,res[4][5],i,j,k=1,x[5],rs[5],av[5],t[5];
     int sum=0;
    printf(\"Please enter total number of processes : \");
    scanf(\"%d\",&np);
    printf(\"Please enter total number of resources : \");
    scanf(\"%d\",&nr);
    printf(\"Please enter claim Matrix\ \");
    for(i=1 ; i<=np; i++){
        printf(\"Process %d :\ \",i);
        for(j=1 ; j<=nr ; j++){
        scanf(\"%d\",&res[i][j]);
        }
    }
    printf(\"Please Enter allocation Matrix\ \");
   for(i=1 ; i<=np; i++){
        printf(\"Process %d :\ \",i);
        for(j=1 ; j<=nr ; j++){
        scanf(\"%d\",&pro[i][j]);
        }
    }
    printf(\"Please Enter total resources : \");
    for(i=1 ; i<=nr ; i++){
        scanf(\"%d\",&rs[i]);}
    printf(\"Please Enter available resources : \");
    for(i=1 ; i<=nr ; i++){
        scanf(\"%d\",&av[i]);
        t[i] = av[i];
    }
    for(i=1 ; i<=np; i++){
        sum=0;
        for(j=1 ; j<=nr ; j++){
        sum = sum + pro[i][j];
        }
        if(sum == 0){
        x[k] = i;
        k++;
        }
    }
    for(i=1 ; i<=np; i++){
        for(L=1 ; L<k ; L++){
        if(i!=x[L])
        {
        flag =1 ;
        for(j=1 ; j<=nr; j++){
        if(res[i][j]<t[j])
        {
            flag = 0;
            break;
        }
        }}
        if(flag == 1){
        x[k] = i;
        k++;
        for(j=1 ; j<=nr ; j++){
            t[j] = t[j] + pro[i][j];
        }
        }
    }}
    printf(\"Processes that occuring Deadlock : \");
    for(j=1 ; j<=np; j++){
        fnd=0;
        for(i=1; i<k; i++){
        if(j==x[i])
        fnd=1;
        }
        if(fnd == 0)
        printf(\"%d\\t\",j);
    }
    getch();
 return 0 ;
 }
Output :
 Enter total number of processes : 2
 Enter total number of resources : 2
 Please Enter claim Matrix :
Process 1 : 1 0
Process 2 : 0 1
 Please enter allocation Matrix :
Process 1 : 1 0
Process 2 : 0 0
 Enter total number of resources :
 1 1
Enter available resources :
 1 0
 Processes causing deadlocks : 1


