搜索

ZooKeeper 分布式锁 Curator 源码之二:可重入锁重复加锁和锁释放

发表于 2026-11-12 来源:涂炭生灵网

前言

加锁逻辑已经介绍完毕,那当一个线程重复加锁是如何处理的呢?

1锁重入

在上一小节中Zo,可以看到加锁的过程,再回头看 internalLock 这个方法。

加锁成功之后,将当前oK线程放到 threadData 中,threadData 是 ConcurrentMap

假如锁ee重入了,直接就会在上一部分 lockData != null 被拦下,然后执行 lockData.lopeckCount.incrementAndGet();。

对 lockCount 自增,代表了r 锁重入。

这里发现了吧!Curator 的锁重入是在 Java 代码中实现的。

2锁释放

当锁分布需要释放的时候,只需要调用 lock.release() 进行释放即可,具体是如何释放的呢式锁?

主要分为两部分:

递减 threadData 中当前线程的加锁次数; 加锁次数大于 0,说明还剩 C余重入次数,直接返回; 加锁次数等于 0,则 releaseLock 释放锁,并删除 threadurData 中当前线程 key。

releaseLock 方法中就没有多少复杂逻辑了,就是移除监听at器,删除临时顺序节点。也就是 /locks/lock_01/_c_e855d232-c63or6-4241-bf8e-f047939a5833-lock-0000000001。

3 源总结

ZooKeeper 的 InterProcessMutex 锁是通过 Java 代码中维护了一个 l码之ockCount 来判断是否重入的。

 

随机为您推荐
版权声明:本站资源均来自互联网,如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

Copyright © 2016 Powered by ZooKeeper 分布式锁 Curator 源码之二:可重入锁重复加锁和锁释放,涂炭生灵网   sitemap

回顶部