java 之多线程 LOCK实现(三)
接上节,为了解决一、二两节出现的缺陷,Peterson锁实现出现了,这是一个经典的双线程锁实现,请看代码:public class PertersonLockImpl implements Lock { private volatile boolean[] b = new boolean; private volatile int flag = 0; public void init() { b = false; b = false; } public void lock() { int currentTheradId = ThreadUtil.getCurrentId(); b = true; flag = currentThreadId; while(currentThreadId == flag && b) { } } public void unlock() { int currentThreadId = ThreadUtil.getCurrentId(); b = false; }} 证明:此lock算法满足互斥。
不是一般性,如果线程A进入了 临界区,要么currentThreadId != flag,即线程B重置了flag,要么b == false,即B线程执行完unlock方法,已经推出临界区。
页:
[1]