读书人

java 之多线程 LOCK兑现(三)

发布时间: 2012-12-23 11:28:15 作者: rapoo

java 之多线程 LOCK实现(三)

接上节,为了解决一、二两节出现的缺陷,Peterson锁实现出现了,这是一个经典的双线程锁实现,请看代码:

public class PertersonLockImpl implements Lock {    private volatile boolean[] b = new boolean[2];    private volatile int flag = 0;    public void init() {       b[0] = false;       b[1] = false;    }    public void lock() {        int currentTheradId = ThreadUtil.getCurrentId();        b[currentThreadId] = true;        flag = currentThreadId;        while(currentThreadId == flag && b[1 - currentThreadId]) {        }   }    public void unlock() {       int currentThreadId = ThreadUtil.getCurrentId();       b[currentThreadId] = false;    }}

?证明:此lock算法满足互斥。

?

不是一般性,如果线程A进入了 临界区,要么currentThreadId != flag,即线程B重置了flag,要么b[1 - currentThreadId] == false,即B线程执行完unlock方法,已经推出临界区。

?

?

?

读书人网 >编程

热点推荐