论坛首页 编程语言技术论坛

java 之多线程 LOCK实现(三)

浏览 2606 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-09-05  

接上节,为了解决一、二两节出现的缺陷,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;
    }

}

 

   发表时间:2012-09-06  
谁来解释一下, 没看懂
0 请登录后投票
   发表时间:2012-09-06   最后修改:2012-09-06
解未知数 写道
谁来解释一下, 没看懂


这是一个自旋锁实现,锁的目的是进入一个临界区,一直在while上循环不能完成lock方法 就表示没有进入到临界区,一直在临界区外等待。
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics