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

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

作者: 程序员小航 2021-07-09 06:48:31

大数据

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

创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于成都网站设计、做网站、魏县网络推广、重庆小程序开发、魏县网络营销、魏县企业策划、魏县品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联公司为所有大学生创业者提供魏县建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com

前言

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

1.锁重入

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

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

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

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

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

2.锁释放

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

主要分为两部分:

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

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

3.总结

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

本文转载自微信公众号「程序员小航」,可以通过以下二维码关注。转载本文请联系程序员小航公众号。

文章题目:ZooKeeper 分布式锁 Curator 源码之二:可重入锁重复加锁和锁释放
网页地址:http://www.36103.cn/qtweb/news25/32575.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联