如何实现一个悲观锁
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();//释放锁