public class barrier {

  private int n, b;

  public barrier(int i) {
    n = i;
    b = 0;
  }

  public synchronized void check() {
    b++;
    if (b < n) {       
       try {
	 this.wait();
       } catch (InterruptedException e) {}
    }
    else {
       b = 0; 
       this.notifyAll();
    }
  }

}



/* output:

    w = 0
    w = 1
    w = 4
    w = 5
    w = 6
    w = 7
    w = 8
    w = 9
    w = 10
    w = 11
    w = 12
    w = 13
    w = 14
    w = 15
    w = 16
    w = 17
    w = 18
    w = 19
    w = 2
    w = 3
    g = 13
    g = 16
    g = 15
    g = 11
    g = 10
    g = 6
    g = 1
    g = 3
    g = 14
    g = 9
    g = 7
    g = 2
    g = 19
    g = 18
    g = 17
    g = 12
    g = 8
    g = 5
    g = 4
    g = 0
    termination

*/
