首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java 之多线程 LOCK兑现(三)

2012-12-23 
java 之多线程 LOCK实现(三)接上节,为了解决一、二两节出现的缺陷,Peterson锁实现出现了,这是一个经典的双

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方法,已经推出临界区。

?

?

?

热点排行