reentrantlock可重入锁 cas原理

更新时间:2023-06-14 03:04:48 阅读: 评论:0

reentrantlock可重入锁 cas原理
饺子蘸酱ReentrantLock是一种典型的可重入锁,它实现了Lock接口,并基于AQS(AbstractQueuedSynchronizer类的实现)实现,它主要通过AQS来实现对共享资源的控制。
西游记真相一个线程可以连续多次调用当前线程的lock()方法,而不会因为已经获得了锁而引发异常;释放锁时,也需要调用unlock()方法相同次数,多次调用只有最后一次调用unlock()方法时,锁才会真正被释放;这个代表当前线程持有锁的计数器叫做“获得计数”(state) 。
基于AQS(AbstractQueuedSynchronizer类的实现)实现,当一个线程执行lock()操作时,可能引发一下的几种操作(tryAcquire):
1. 如果state为0,说明当前没有线程持有锁,将state置为1,把当前线程记录为持有锁的线程,同时将获得计数(hold count)置为1,然后返回true,表示获得了锁。
党的十六字方针
2. 如果state不为0,代表锁已被其他线程持有,接下来需要判断,此时current线程是否持有
锁。如果持有锁,则将获得计数(hold count)加1,并返回true,表示获得了锁;如果不持有锁,则把请求加入到等待队列,并返回fal。
粮油储藏技术规范当一个线程执行unlock()操作时(tryRelea),代码会根据当前线程持有锁的计数,当持有计数=1时,释放锁。
大学生恋爱观同样,lock执行及unlock执行过程,依然使用CAS原理实现,确保多线程操作原子性
CAS原理,即比较并交换,是一般硬件所提供的原子操作,是目前比较也比较流行的实现原子操作的方式,也是java多线程操作的同步主要实现方式,CAS用一种类似于乐观锁的思想实现:它尝试用一个函数去更新内存数据,如果用户内存中的值跟用户更新的值有冲突,则用户需要再次更新,依次迭代,直到更新成功。
唇亡齿寒>电子护照

本文发布于:2023-06-14 03:04:48,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1037467.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:实现   线程   持有   操作   获得   原子   用户
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图