如何实现一个悲观锁

2018-05-04  本文已影响0人  逸筱幻

锁在编程中经常被用到。常用的锁主要有两种

乐观锁主要是基于版本号的实现。给数据加一个version字段基本可以实现

本文主要实现一个悲观锁

主要思路:

下面给出了JS版本的实现

const LockUtils = {
  lockPool: new Map(),//所有的锁
  acquire: function(lockName, timeout = 100){//传入key名称, 超时时间
    const that = this;
    end = new Date().getTime() + timeout;
    while(new Date().getTime() <= end){
      if(!that.lockPool.has(lockName)){
        that.lockPool.set(lockName, {
          name: lockName,
          meta: '上下文信息'
        })
        return {
          release: function(){//释放锁
            that.lockPool.delete(lockName);
          }
        }
      }
    }
    return undefined;
  }
}

用例

const lock = LockUtils.acquire('lock');//获取锁
const lock2 = LockUtils.acquire('lock');//锁被占用,获取失败
lock.release();//释放锁
上一篇下一篇

猜你喜欢

热点阅读