johnnyking 发表于 2013-2-3 14:26:43

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]
查看完整版本: java 之多线程 LOCK实现(三)