478 views
In certain countries, when two people meet they bow to each other. The protocol is that one of them bows first and stays down until the other one bows. If they bow at the same time, they will both stay bowed forever. Write a program that does not deadlock.

I think the following program would suffice:

bowing = [false, false]

bowing[i] = true;

if(bowing[j]==true) bowing[i] = false;

I thought that "If they both bow at the same time, they will both stay bowed forever" was the deadlock condition which had to be avoided. How are you avoiding deadlock through your code and what is the deadlock condition? @GMPrakhar

Deadlock condition can be thought of as the situation where we use infinite wait, for example

while(bowing[j]);

bowing[i] = false;

In my solution, I avoided the infinite wait, confirming with the question's language.
semafore s=1
pi
wait(s);
bow();
signal(s);
}