“J.U.C”:CLH队列锁 (r)

来源:互联网 发布:淘宝外宣语言 编辑:程序博客网 时间:2024/06/05 17:32

在前面介绍的几篇博客中总是提到CLH队列,在AQS中CLH队列是维护一组线程的严格按照FIFO的队列。他能够确保无饥饿,严格的先来先服务的公平性。下图是CLH队列节点的示意图:

2015112100001

在CLH队列的节点QNode中包含有一个locked的字段,该字段表示该节点是否需要获取锁,为true表示需要获取,为false表示不需要获取。在CLH队列中,节点与节点之间并不是通过next指针来连接的而是通过myPred所指向节点的变化情况来影响的myNode的行为。

假设有两个线程(线程A、线程B)。开始线程A需要获得锁,那么他会创建一个QNode节点,并将locked设置为true(表示需要获取锁),同时获取一个指向前驱的myPred并在前驱节点的的locked上面旋转直到前驱节点是否锁为止(locked为false,这个动作我们一般称之为自旋),当然这里会将tail指向自身来表示它是CLH队列的最后一个节点,如下:

2015112500002

然后线程B添加到CLH队列中,这时tail域应该指向线程B。

2015112500001

CLH队列锁的优点在于空间复杂度低(如果有n个线程,L个锁,每个线程每次只获取一个锁,那么需要的存储空间是O(L+n),n个线程有n个myNode,L个锁有L个tail)。CLH的变种体被运用到了AQS中。

参考文献

JAVA并发编程学习笔记之CLH队列锁:http://blog.csdn.net/aesop_wubo/article/details/7533186

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 怎么办工行携程灵通卡 易买得消费卡怎么办 贷款回执单丢了怎么办 医院挂号过号了怎么办 脑子里总是胡思乱想睡不着怎么办 被妹夫给睡了怎么办 被妹夫抱了下怎么办 最里面牙齿烂了怎么办 老公有外遇不承认怎么办 对老公疑心太重怎么办 当你发现老公出轨怎么办 发现自己老婆出轨了怎么办 笔袋密码忘记了怎么办 海关锁密码忘了怎么办 800度近视献了血怎么办 当老公有了外遇妻子该怎么办 妻子有外遇我该怎么办 喜欢拔粗的头发怎么办 小腿长水泡很痒怎么办 脚丫有水泡又痒怎么办 脚上起水泡怎么办很疼 脚上反复长水泡怎么办 高考没考上二本怎么办 车子被扣了60分怎么办 科目三挂了三次怎么办 装修到一半跑了怎么办 13岁自慰被发现怎么办 应用锁密码忘了怎么办 3d缺少dll文件怎么办 真三国无双6闪退怎么办 孙策死了大乔怎么办 30周羊水偏多怎么办 怀孕34周羊水多怎么办 孕34周羊水偏多怎么办 怀孕37周羊水少怎么办 电脑无法识别u盘怎么办 后厨地沟堵了怎么办 浅口鞋子不跟脚怎么办 机械键盘串键了怎么办 银龙突然不吃食怎么办 狗被蜈蚣咬了怎么办