men.enter() { lock(); men.waiting++; if (women.waiting || women.inside) { unlock(); men.sleeping.P(); lock(); } men.waiting--; men.inside++; unlock(); } men.leave() { lock(); men.inside--; if (men.inside == 0) { for (i = 0; i < women.waiting; i++) women.sleeping.V(); } unlock(); }