请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

自旋锁和自适应自旋锁问题

问题1: 老师,自适应自旋锁 他是 自旋锁的一个加强版,自旋锁是我一直处理忙循环状态直到获取到锁, 自适应自旋锁是比如我先设定忙循环100次后,那么停止自旋去尝试获取锁,如果100次之后还是没有锁,那么他就会根据相关数据比如锁用户状态来判定,下一次自旋次数是多少次 是这么理解吗?
问题2 :比如一个线程过来自旋1000次,当锁资源在 自旋99次的时候已经被释放了,那么他还是要自旋1000次之后,才开始抢夺锁资源吗?同样的自适应自旋锁可能会优化一下, 可能自旋的不是1000次,有可能优化自旋300次,那也是等待300次之后才可以进行锁的争抢吗?
问题3:无论自旋锁和自适应自旋锁如果是一直没有获取到锁资源,都是会一直处于自旋状态,自适应自旋锁不会说因为我判断可能要等好久,而将线程挂起,这么理解吗?

正在回答 回答被采纳积分+3

1回答

翔仔 2019-05-27 00:02:30

同学好,关于自适应自旋锁相关文书较少,具体还需要看JVM的实现源码,它主要是根据上一次自旋获取情况,比如说在初始自旋次数(默认是10)内,如果能够获得锁,JVM记录下来后,那么它就会在下一次争夺锁的时候认为是能够有希望获得锁的,那么等20次也无所谓(次数需要JVM根据特定算法来决定),所以会延长等待时间,这样做主要也是为了尽可能减少切换造成的开销。

问题2的话是不对的,它只是说最多自旋这么多次就切换,期间争夺成功了就不会自旋了

问题3,自适应其实是依据上次做调整,单次执行跟自旋锁一样,超过限定就会挂起线程。

抱歉这几天都在医院,借了电脑,偷偷答疑下

0 回复 有任何疑惑可以回复我~
  • 提问者 qq_简简单单_132 #1
    好的 谢谢老师, 注意身体啊!
    回复 有任何疑惑可以回复我~ 2019-05-29 23:32:38
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信