利用Semaphore和AtomicBoolean实现的互斥锁

很不幸的是在我学习了操做系统以后,发现一下代码有错误。。我会更正 java

由于要用到互斥锁,可是current包下没有提供Mutex锁,因而参见网上的实现用Semaphore实现了一个。不知道会不会有问题,各位拍拍 学习

import java.util.concurrent.Semaphore;
import java.util.concurrent.atomic.AtomicBoolean;
public class Mutex {

	private Semaphore s = new Semaphore(1);
	private AtomicBoolean flag=new AtomicBoolean(true);
	public void acquire() throws InterruptedException {
		if(flag.getAndSet(false)){
			s.acquire();
		}
	}

	public void release() {
		if(!flag.getAndSet(true)){
			s.release();
		}
	}

	public boolean attempt(int ms) {
		return s.tryAcquire(ms);
	}
	
	public static void main(String[] args) throws InterruptedException {
		Mutex m = new Mutex();
		m.acquire();
		m.release();
		m.acquire();
		m.release();
		m.release();
		m.acquire();
	}
}
相关文章
相关标签/搜索