class MutexTypeH extends Mutex {

	private volatile int turn;
	private volatile boolean[] flag;
	
	MutexTypeH() {
		turn = 0;

		flag = new boolean[2];
		flag[0] = flag[1] = false;
	}

	public void p(int id) {
		int other = 1 - id;
		flag[id] = true;

		while (turn == other) {
			while (flag[other]) Thread.yield();
			turn = id;
		}
	}

	public void v(int id) {
		flag[id] = false;
	}

	public String toString() {
		return "H";
	}

	public void describe() {
		System.out.println("Mutex type H");
	}
}