class Baldo extends Process { public static final int NCS = 0; public static final int CS = 1; class REQUEST extends Message { public final int id; public REQUEST(int id) {this.id = id;} public String toString() {return "REQUEST, "+id;} } public int stato; public final List pending = new ArrayList(p.length); public boolean waiting; public int vicino; public void init() { System.out.println(this + " init"); stato = NCS; pending.clear(); waiting = false; vicino = (id + 1) % p.length; } public void requestCS() { waiting = true; send(vicino, new REQUEST(id)); } public void exitCS() { waiting = false; stato = NCS; for(int id : pending) { pending.remove((Object)id); send(vicino, new REQUEST(id)); } } public void recv(int src, Message m) { if(m instanceof REQUEST) recv(src, (REQUEST)m); } public void recv(int src, REQUEST m) { if(m.id == id) { stato = CS; System.out.println(this + " in CS!!!"); exitCS(); } else { if(waiting == false) { send(vicino, new REQUEST(m.id)); } else { if(stato == NCS && m.id < id) { send(vicino, new REQUEST(m.id)); } else { pending.add(m.id); } } } } }