public class WSAwithLOCK {
	
	public static Lock lock = new Lock();

	
	public class TreadOne extends Treads {
		public TreadOne() {
			start();
		}
		public void run() {
			while(true) {
				lock.LOCK();
				criticalsectionone();
				lock.UNLOCK();
				otherstuffone();
			}
		}
	}


	public class TreadTwo extends Treads {
		private boolean twocannotenter = false;
		public TreadTwo() {
			start();
		}       
		public void run() {
			while(true) {
				lock.LOCK();
				criticalsectiontwo();
				lock.UNLOCK();
				otherstufftwo();
			}       
		}       
	}       
	
	public class Lock {
		private boolean L = false;
		public void LOCK() {
			boolean lockset;
			lockset = true;
			while(lockset) {
				testandset(lockset, L);
			}
		}
		public void UNLOCK() {
			L = false;
		}
	}
}
