码迷,mamicode.com
首页 > 其他好文 > 详细

ReentrantReadWriteLock之读写锁判断

时间:2019-09-30 21:41:49      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:read   aqs   width   readwrite   无符号   判断   二进制   sha   数值   

一. 读写锁是怎么实现的?

  继承AQS,然后通过将AQS中的state转化为二进制,分为高16位和低16位来区分。高16位表示读状态,低16位为写状态。

二. 解析表示方式(高低16位)

  假设此时state是数值S

  a.写锁

    在判断写锁时,通过 K=S&0X0000FFFF, 将高位全部抹掉,此时只有低16位,然后判断K是否大于0,K>0,表示有写锁,反之没有。

  b.读锁

    在读锁时,是通过K=S>>>16,我们可以看到是无符号右移(int是有符号,防止高位为1时,右移高位补1),此时右移,高位补0,把写锁的低16位判断去掉了。然后在判断K是否大于0, K>0,有读锁,反之没有。

下图是在获取读写锁时的操作。方法分别为 tryAcquire 和 tryAcquireShare.

 

技术图片

 

 

  

 

ReentrantReadWriteLock之读写锁判断

标签:read   aqs   width   readwrite   无符号   判断   二进制   sha   数值   

原文地址:https://www.cnblogs.com/lifacheng/p/11614164.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!