美文网首页
如何实现一个悲观锁

如何实现一个悲观锁

作者: 逸筱幻 | 来源:发表于2018-05-04 13:00 被阅读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();//释放锁
    

    相关文章

      网友评论

          本文标题:如何实现一个悲观锁

          本文链接:https://www.haomeiwen.com/subject/xckdrftx.html