Redission可重入加锁机制

先了解一下“锁互斥机制”

比如客户端1拿到锁之后,还未执行完代码,此时客户端2来尝试拿锁,

第一个判断:客户端2这时候会发现这个锁已经存在了

第二个判断:是否是客户端2加的锁,但是也发现不是,因为是客户端1加的锁

然后客户端2会获取到这个锁的剩余生存时间,此时客户端2会进入一个while循环,不停的尝试加锁。

如果客户端1都已经持有了这把锁了,结果客户端1又来加锁会怎么样呢?

下面这种代码:


第一次执行lock.lock()

第二次执行lock.lock()

第一个if判断肯定不成立,“exists myLock”会显示锁key已经存在了。第二个if判断会成立,因为myLock的hash数据结构中包含的那个ID,就是客户端1的那个ID,也就是“8743c9c0-0795-4907-87fd-6c719a6b4586:1”

此时就会执行可重入加锁的逻辑,他会用:

incrby myLock 8743c9c0-0795-4907-87fd-6c71a6b4586:1 1  ,通过这个命令,对客户端1的加锁次数,累加1。此时myLock数据结构变为下面这样:


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。