Consider the following scenario for process P1 .
Process P1:-
while(true)
{
wants1 = True; // "I want to enter."
while (wants2 == true); // "If you want to enter and if it's your turn I don't want to enter any more."
/* Critical Section */ // Enter CS!
wants1 = false; // "I don't want to enter any more."
}
this is the scenario. This guarantee mutual exclusion .
And here is Deadlock . If no one either p1 or p2 can enter into CS then deadlock happen.
Hence correct option is option D , as both ME and Deadlock is satisfied here.
Also BW does not depends upon deadlock , not depends on progress, BW just says there is some bound exists .. so here in this question BW is satisfied as when p2 willing to enter it's CS by making int[1]=True; before that p1 enter into CS one time and after that p2 enter.
hence number of time a process enter into CS is 1 for requesting process p2.
B is not correct as we follow definition of BW based on ' number of times other process can enter into it's CS' .
when we follow Galvin definition of Bounded waiting, it satisfy BW in this question, which makes option B false .
see Algorithm #3 ( click the Blue Link ) This CMU link , they refer BW based on time ( means no process should wait for a resource for infinite amount of time.)
But as in GATE like exam we follow standard books only we should go with Galvin definition ( means how many other process enter into CS before a particular process request to enter into it's CS and that request is granted ).