#include<stdio.h>
int max[ 100 ] [ 100 ] ;
int alloc[ 100 ] [ 100 ] ;
int need[ 100 ] [ 100 ] ;
int avail[ 100 ] ;
int n, r;
void input( ) ;
void show( ) ;
void cal( ) ;
int main( )
{
int i, j;
printf ( "********** Deadlock Detection Algo ************\n " ) ; input( ) ;
show( ) ;
cal( ) ;
return 0 ;
}
void input( )
{ int i, j;
printf ( "Enter the no of Processes\t " ) ; printf ( "Enter the no of resource instances\t " ) ; printf ( "Enter the Max Matrix\n " ) ; for ( i= 0 ; i< n; i++ )
{ for ( j= 0 ; j< r; j++ ) {
} }
printf ( "Enter the Allocation Matrix\n " ) ; for ( i= 0 ; i< n; i++ )
{ for ( j= 0 ; j< r; j++ ) {
scanf ( "%d" ,& alloc
[ i
] [ j
] ) ; } }
printf ( "Enter the available Resources\n " ) ; for ( j= 0 ; j< r; j++ ) {
} }
void show( ) {
int i, j;
printf ( "Process\t Allocation\t Max\t Available\t " ) ; for ( i= 0 ; i< n; i++ ) {
for ( j= 0 ; j< r; j++ ) {
for ( j= 0 ; j< r; j++ )
if ( i== 0 ) {
for ( j= 0 ; j< r; j++ )
} } }
void cal( )
{ int finish[ 100 ] , temp, need[ 100 ] [ 100 ] , flag= 1 , k, c1= 0 ;
int dead[ 100 ] ;
int safe[ 100 ] ;
int i, j;
for ( i= 0 ; i< n; i++ )
{ finish[ i] = 0 ;
}
//find need matrix
for ( i= 0 ; i< n; i++ )
{ for ( j= 0 ; j< r; j++ )
{
need[ i] [ j] = max[ i] [ j] - alloc[ i] [ j] ;
} }
while ( flag)
{ flag= 0 ;
for ( i= 0 ; i< n; i++ )
{ int c= 0 ;
for ( j= 0 ; j< r; j++ )
{ if ( ( finish[ i] == 0 ) && ( need[ i] [ j] <= avail[ j] ) )
{ c++;
if ( c== r)
{
for ( k= 0 ; k< r; k++ )
{ avail[ k] += alloc[ i] [ j] ;
finish[ i] = 1 ;
flag= 1 ;
} //printf("\nP%d",i);
if ( finish[ i] == 1 )
{ i= n;
} } } } } }
j= 0 ;
flag= 0 ;
for ( i= 0 ; i< n; i++ )
{
if ( finish[ i] == 0 )
{ dead[ j] = i;
j++;
flag= 1 ;
} }
if ( flag== 1 )
{
printf ( "\n \n System is in Deadlock and the Deadlock process are\n " ) ; for ( i= 0 ; i< n; i++ )
} }
else
{
printf ( "\n No Deadlock Occur" ) ; } }
I2luY2x1ZGU8c3RkaW8uaD4KaW50IG1heFsxMDBdWzEwMF07CmludCBhbGxvY1sxMDBdWzEwMF07CmludCBuZWVkWzEwMF1bMTAwXTsKaW50IGF2YWlsWzEwMF07CmludCBuLHI7CnZvaWQgaW5wdXQoKTsKdm9pZCBzaG93KCk7CnZvaWQgY2FsKCk7CmludCBtYWluKCkKewppbnQgaSxqOwpwcmludGYoIioqKioqKioqKiogRGVhZGxvY2sgRGV0ZWN0aW9uIEFsZ28gKioqKioqKioqKioqXG4iKTsKaW5wdXQoKTsKc2hvdygpOwpjYWwoKTsKCnJldHVybiAwOwp9CnZvaWQgaW5wdXQoKQp7aW50IGksajsKcHJpbnRmKCJFbnRlciB0aGUgbm8gb2YgUHJvY2Vzc2VzXHQiKTsKc2NhbmYoIiVkIiwmbik7CnByaW50ZigiRW50ZXIgdGhlIG5vIG9mIHJlc291cmNlIGluc3RhbmNlc1x0Iik7CnNjYW5mKCIlZCIsJnIpOwpwcmludGYoIkVudGVyIHRoZSBNYXggTWF0cml4XG4iKTsKZm9yKGk9MDtpPG47aSsrKQp7Zm9yKGo9MDtqPHI7aisrKSB7CnNjYW5mKCIlZCIsJm1heFtpXVtqXSk7Cn19CgpwcmludGYoIkVudGVyIHRoZSBBbGxvY2F0aW9uIE1hdHJpeFxuIik7CmZvcihpPTA7aTxuO2krKykKe2ZvcihqPTA7ajxyO2orKykgewpzY2FuZigiJWQiLCZhbGxvY1tpXVtqXSk7Cn19CnByaW50ZigiRW50ZXIgdGhlIGF2YWlsYWJsZSBSZXNvdXJjZXNcbiIpOwpmb3Ioaj0wO2o8cjtqKyspIHsKc2NhbmYoIiVkIiwmYXZhaWxbal0pOwp9fQp2b2lkIHNob3coKSB7CmludCBpLGo7CnByaW50ZigiUHJvY2Vzc1x0IEFsbG9jYXRpb25cdCBNYXhcdCBBdmFpbGFibGVcdCIpOwpmb3IoaT0wO2k8bjtpKyspIHsKcHJpbnRmKCJcblAlZFx0ICIsaSsxKTsKZm9yKGo9MDtqPHI7aisrKSB7CnByaW50ZigiJWQgIixhbGxvY1tpXVtqXSk7IH0KcHJpbnRmKCJcdCIpOwpmb3Ioaj0wO2o8cjtqKyspCntwcmludGYoIiVkICIsbWF4W2ldW2pdKTsgfQpwcmludGYoIlx0Iik7CmlmKGk9PTApIHsKZm9yKGo9MDtqPHI7aisrKQpwcmludGYoIiVkICIsYXZhaWxbal0pOwp9fX0KCnZvaWQgY2FsKCkKeyBpbnQgZmluaXNoWzEwMF0sdGVtcCxuZWVkWzEwMF1bMTAwXSxmbGFnPTEsayxjMT0wOwppbnQgZGVhZFsxMDBdOwppbnQgc2FmZVsxMDBdOwppbnQgaSxqOwpmb3IoaT0wO2k8bjtpKyspCgp7ZmluaXNoW2ldPTA7Cn0KLy9maW5kIG5lZWQgbWF0cml4CmZvcihpPTA7aTxuO2krKykKe2ZvcihqPTA7ajxyO2orKykKewpuZWVkW2ldW2pdPW1heFtpXVtqXS1hbGxvY1tpXVtqXTsKfX0Kd2hpbGUoZmxhZykKe2ZsYWc9MDsKZm9yKGk9MDtpPG47aSsrKQp7aW50IGM9MDsKZm9yKGo9MDtqPHI7aisrKQp7aWYoKGZpbmlzaFtpXT09MCkmJihuZWVkW2ldW2pdPD1hdmFpbFtqXSkpCntjKys7CmlmKGM9PXIpCnsKZm9yKGs9MDtrPHI7aysrKQp7YXZhaWxba10rPWFsbG9jW2ldW2pdOwpmaW5pc2hbaV09MTsKZmxhZz0xOwp9Ly9wcmludGYoIlxuUCVkIixpKTsKaWYoZmluaXNoW2ldPT0xKQp7aT1uOwp9fX19fX0Kaj0wOwpmbGFnPTA7CmZvcihpPTA7aTxuO2krKykKewppZihmaW5pc2hbaV09PTApCntkZWFkW2pdPWk7CgpqKys7CmZsYWc9MTsKfX0KaWYoZmxhZz09MSkKewpwcmludGYoIlxuXG5TeXN0ZW0gaXMgaW4gRGVhZGxvY2sgYW5kIHRoZSBEZWFkbG9jayBwcm9jZXNzIGFyZVxuIik7CmZvcihpPTA7aTxuO2krKykKe3ByaW50ZigiUCVkXHQiLGRlYWRbaV0pOwp9fQplbHNlCnsKcHJpbnRmKCJcbk5vIERlYWRsb2NrIE9jY3VyIik7IH19