class AnotherBinarySemaphore {

   private boolean locked = false;

   public AnotherBinarySemaphore() {}  // constructors
   public AnotherBinarySemaphore(boolean initial) {locked = initial;}
   public AnotherBinarySemaphore(int initial) {locked = (initial == 0);}

   public synchronized void P() {
      while (locked) {
         try { wait(); } catch (InterruptedException e) {}
      }
      locked = true;
   }

   public synchronized void V() {
      if (locked) notify();
      locked = false;
   }
}
