ZooKeeper 分布式锁 Curator 源码之三:可重入锁并发加锁
前言
在了解了加锁和锁重入之后,最需要了解的还是在分布式场景下或者多线程并发加锁是如何处理的?
1并发加锁
先来看结果,在多线程对 /loZocks/lock_01 加锁时,是在后面又创建了新的临时节点。
这块在加锁方法 CreateBuilderImpl#pathInForegrounoKd 中已经介绍过
这里判断 /locks/lock_01 路径已经存在,会直接创建新的临时顺序节点。
真正判断锁是否获取成功,其实是在 LockIneeternals#attemptLock 方法中的 internalLockLoop 方法中。
加锁结果及监听
internalLockLoopep 方法的主要作用是判断加锁结果,以及获取锁失败时,对其他节点的监听。
获取父节点 /locks/lock_01 下的所有子节点,按照从小到大排序,r 判断自己是不是获取到锁,没有获取到就监听自己前一个节点; 支持设置超时时间,超时直接返回失败; 不支持设置超时时间或者还没有超时,则直接 wait分布 等待。
是否获取锁的代码在 StandardLockInternalsDriver#getsTheLock
这块就是判断是否为最小节点,因为在 g式锁etSortedChildren 中已经对所有节点排序,所以方法中的 List children 是有序的。
maxLeases 是在 Inter CProcessMutex 初始化的时候,指定的值为 1。
最终这里的结果是,判断自己是不是最小,不是最小,就将 pathToWatch 设置为ur前一个节点。
只监听自己的前一个节点,可以避免羊群效应!
为什么要进行等待呢?
因为是为了防止无效自旋,因为这里有监听机制,会监听上一个节点是否at释放。
这块是 ZooKeeper 的 Watcher 监听机制,在节点释放的时候,会进行回调,然后使用 Java 的 notifyAll 方法通知所有的or wait 线程。然后这里的 while trye 会继续执行,重新检查是否获得锁等。
2总结
本文主要介绍了基于 ZooKeeper 的分布式锁框架 源 Curator 在并发场景下的锁竞争问题。
重点需要了解的是:
为了避免羊群效应,临时顺序节点,加锁失败后监听的是前一个节点; 为了避免无效自旋,码之这里使用了 Java 的 wait/notifyAll 机制; 可以看出,默认加锁就是公平锁。
- ·2026 年全球 AI 光收发模块市场规模将达 260 亿美元,供应链瓶颈亟待解决
- ·马斯克旗下xAI起诉苹果和OpenAI 指控合谋垄断AI市场
- ·云安全日报211029:红帽OpenShift云应用平台发现拒绝服务漏洞,需要尽快升级
- ·奥赛冠军都做不对的题,却被拿来考ML模型?GPT-3:我不行
- ·标签: 立讯精密 港交所 消费电子 汽车电子
- ·标签: 无界动力 保时捷创投 中金私募 张玉峰
- ·谷歌拟测试“消防无人机” 重点瞄准农田灭火
- ·捷克最大搜索引擎Seznam指控谷歌垄断 索赔4亿美元
- ·标签: 微软 Azure AI Fairwater NVIDIA
- ·科技巨头互相削弱:谷歌游说议员 拟利用听证会向微软施压
- ·Facebook盘前跌超3% 第二季度日活表现不及市场预期
- ·英特尔新CEO点燃三把火:斥200亿美元建厂 委托代工厂制造处理器
- ·无刘海+折叠,苹果的新iPhone手机你喜欢吗?
- ·云安全日报210225:IBM消息传递网关发现执行任意代码漏洞,需要尽快升级
- ·栀子花开歌曲原唱
- ·标签: 月下龙吟 西安卓渊 红果免费短剧 短剧讨薪
- ·https://www.remit.co.jp/id/?s=歌外推【tg:seogoogle987】,7nm
- ·https://www.sic-info.org/vi/?s=歌外推【tg:seogoogle987】,4iG
- ·https://www.therapeuticassociates.com/?cat=5&s=歌外推【tg:seogoogle987】,Wiu
- ·https://www.urmc.rochester.edu/news/search?q=歌外推【tg:seogoogle987】,o4c
- ·https://www.vocabulary.com/dictionary/歌外推【tg:seogoogle987】,SRu
- ·https://www.pickett.co.uk/collections/vendors?q=歌外推【tg:seogoogle987】,z5o
- ·https://www.impactpool.org/search/?type=79&q=歌外推【tg:seogoogle987】Ieb
- ·https://www.smics.com/tc/site/search?token=歌外推【tg:seogoogle987】,GG5
- ·https://www.qylaws.com/search/歌外推【tg:seogoogle987】,gtR
- ·https://www.uckfieldtc.gov.uk/?s=歌外推【tg:seogoogle987】,PTW
