class Barrier
{
private int cIndex = 0;
private CounterState state = null;
public Barrier(CounterState state)
{
this.state = state;
}
public void barrier (int n)
{
int val = state.readCounter(cIndex);
if (val == n-1)
state.writeCounter(1-cIndex, 0);
val = state.incAndReadCounter(cIndex);
while (val != n) {
try { Thread.sleep(1); } catch(Exception e) {}
val = state.readCounter(cIndex);
}
cIndex = 1 - cIndex;
}
}