public class barrier {

  private int n, b;
  private sema bs, bl;

  public barrier(int i) {
    n = i;
    b = 0;
    bs = new sema(0);
    bl = new sema(1);
  }

  public void check() {
    bl.P();
    b++;
    if (b < n) { 
       bl.V(); 
       bs.P(); 
    }
    else {
       b = 0; 
       bl.V();
       for (int j=1; j<n; j++) { bs.V(); }
    }
  }

}
