# GATE - 2006 | OS | The wait and signal operations of a monitor are implemented using ## Question:

The wait and signal operations of a monitor are implemented using semaphores as follows. In the following,

• x is a condition variable,
• mutex is a semaphore initialized to 1,
• x_sem is a semaphore initialized to 0,
• x_count is the number of processes waiting on semaphore x_sem, initially 0, next is a semaphore initialized to 0,
• next_count is the number of processes waiting on semaphore next, initially 0.

The body of each procedure that is visible outside the monitor is replaced with the following:

P(mutex);

body of procedure

if (next_count > 0)

V(next);

else

V(mutex);

• Each occurrence of x.wait is replaced with the following:

x_count = x_count + 1;

if (next_count > 0)

V(next)

else

V(mutex);

------------------------------------------------------------ E1;

x_count = x_count - 1;

• Each occurrence of x.signal is replaced with the following:

if (x_count > 0)

{

next_count = next_count + 1;

------------------- E2;

P(next),

next_count = next_count - 1;

}

For correct implementation of the monitor, statements E1 and E2 are, respectively,

 A P(x_sem), V(next) B V(next), P(x_sem) C P(next), V(x_sem) D P(x_sem), V(x_sem)

## Solution:

### Option (D) is Correct.

x_count is the no. of processes waiting on semaphore x_sem, initially 0.

x_count is incremented and decremented in x_wait, which shows that in between them wait(x_sem) must happen which is P(x_sem).

Correspondingly V(x_sem) must happen in x_signal.

So, D choice.

Thank You