数据库 centos7 javascript dart configuration scrapy Browserify Material UI Font Awesome vue实现原理 后台ui模板 js事件绑定 ajax的get请求 sallenkey滤波器 oracle存储过程返回值 python生成随机数 python编程教程 java正则表达式用法 java正则匹配数字 java获取url linuxsudo命令 如何强行退出小米账号 js获取父节点 c语言代码表白 超级力量2修改 战斗的召唤 mysql使用教程 苹果手机总是自动重启 工程html加密 babelrc 沉沦之城 快递电子面单打印软件 ppt虚线怎么画 edius调色 美图秀秀pc版下载 eclipse汉化版 代理服务器软件 千千静听老版本下载 电视应用安装器 java学生管理系统
当前位置: 首页 > 学习教程  > 编程语言

aqs clq

2021/1/28 23:51:43 文章标签:

ConcurrentLinkedQueue(简称clq) 头尾节点的更新使用懒更新 因为clq使用cas操作更行tail和head,CAS即乐观锁,而只有在真正乐观的时候(竞争不够激烈)使用CAS才比加锁 park线程要快。为了避免竞争太激烈而造成…

ConcurrentLinkedQueue(简称clq)
头尾节点的更新使用懒更新
因为clq使用cas操作更行tail和head,CAS即乐观锁,而只有在真正乐观的时候(竞争不够激烈)使用CAS才比加锁 park线程要快。为了避免竞争太激烈而造成cas一直失败,即让情况更加符合所谓的乐观情况,懒更新就可以起到一定作用。
AQS的锁获取也是先尝试几次CAS,如果都失败了则把线程加入等待队列,避免了极端情况(cas一直失败cpu一直空转)的发生。
clq没有这样做,他只是使用懒更新来尽量避免出现竞争太激烈的cas全失败的情况。原因可能是这样:1,clq适用于特定场景,典型如生产者消费者,对于单纯的队列操作(队头取元素,队尾入元素)一般比较快,即使并发很高也很难发生cas一直失败的情况。懒更新
就足够了。而aqs面对的情况则要更加复杂,加锁释放锁之间有可能持续时间非常长(例如加锁循环处理表的数据等),几次cas+park线程无疑更加适用一般情况。


本文链接: http://www.dtmao.cc/news_show_650312.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?