public final class UnisexBathroomSC { public static void main (String args[]) { BathroomController c = new BathroomController(); Man m1 = new Man(c,1); Man m2 = new Man(c,2); Man m3 = new Man(c,3); Woman w1 = new Woman(c,1); Woman w2 = new Woman(c,2); Woman w3 = new Woman(c,3); m1.start(); w1.start(); m2.start(); w2.start(); m3.start(); w3.start(); try { m1.join(); w1.join(); m2.join(); w2.join(); m3.join(); w3.join(); } catch (InterruptedException e) {} } } final class Man extends TDThread { private BathroomController c; private int ID; Man (BathroomController c, int ID) {super("Man"+ID); this.c = c; this.ID = ID; } public void run () { System.out.println("Man"+ID+" running"); c.mensroom(ID); System.out.println("Man"+ID+" finished"); } } final class Woman extends TDThread { private BathroomController c; private int ID; Woman (BathroomController c, int ID) {super("Woman"+ID); this.c = c; this.ID = ID; } public void run () { System.out.println("Woman"+ID+" running"); c.ladiesroom(ID); System.out.println("Woman"+ID+" finished"); } } final class BathroomController extends monitorSC { /* declarations here */ public BathroomController() {super("BathroomController");} public void mensroom(int ID) { manEnter(ID); System.out.println("Man" + ID + " use bathroom"); try{Thread.sleep(10);}catch(InterruptedException e){}; manExit(ID); } public void ladiesroom(int ID) { womanEnter(ID); System.out.println("Woman" + ID + " use bathroom"); try{Thread.sleep(10);}catch(InterruptedException e){}; womanExit(ID); } private void manEnter(int ID) { enterMonitor("manEnter"); exerciseEvent("ManRequest"+ID); // code here exerciseEvent("ManEnter"+ID); //if (numWomen>0) System.out.println("Error: concurrent access"); exitMonitor(); } private void manExit(int ID) { enterMonitor("manExit"); // code here exerciseEvent("ManExit"+ID); exitMonitor(); } private void womanEnter(int ID) { enterMonitor("womanEnter"); exerciseEvent("WomenRequest"+ID); // code here exerciseEvent("WomenEnter"+ID); //if (numMen>0) System.out.println("Error: concurrent access"); exitMonitor(); } private void womanExit(int ID) { enterMonitor("womanExit"); // code here exerciseEvent("WomanExit"+ID); exitMonitor(); } }