您的位置:首页 > 其它

大型局域网中二层结构与三层结构

2014-11-26 19:26 197 查看
接上节,为了解决一、二两节出现的缺陷,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方法,已经推出临界区。

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: