Advertisement

图解Redisson分布式锁源码可重入锁(下)

阅读量:

Redis可重入锁的核心实现流程——关于可重入锁的锁定机制

(1)同一线程多次获取锁——重入式加锁
接下来我们进一步分析用于执行锁定操作的脚本:

在首次执行加锁操作时,key尚未被创建,因此此时可以顺利将当前线程的相关信息存入key对应的hash数据结构中,从而表明该线程已成功获取锁。

然而当下是同一线程再次尝试对同一个key进行加锁操作,此时由于key已经存在,原先的条件自然不再成立,程序便会进入下一个if判断分支。

该分支的逻辑为:

hexists anyLock UUID:ThreadId

即用于确认当前key是否由当前线程所持有。由于是相同线程再次对同一key进行加锁操作,因此在hash数据结构中必然能找到对应记录,条件成立后将执行以下命令:

hincrby KEYS[1] ARGV[2] 1 即 hincrby anyLock UUID:ThreadId 1

这表示对anyLock这个key对应的hash数据结构中UUID:ThreadId字段的值增加1。

从:
anyLock {
UUID:ThreadId 1

全部评论 (0)

还没有任何评论哟~