偏向锁,如果利用CAS来保证线程的同步?

发布于 2022-09-11 23:36:31 字数 98 浏览 20 评论 0

偏向锁不是比较和设置吗,在偏向锁竞争的时候如果线程A没有退出同步代码块的时候,线程B利用CAS来替换ThreadID值,并且成功了 那么线程B就也同样进入同步代码块了,这不是有问题吗

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

如若梦似彩虹 2022-09-18 23:36:31

B线程会先检测锁是否是偏向于某个线程的偏向锁,如果发现是偏向锁会检测偏向的线程是否存活,如果不存活则将当前锁重新偏向于B线程,获取偏向锁。如果存活则遍历偏向线程的栈,检查该对象的使用情况,如果仍然需要持有偏向锁,则偏向锁升级为轻量级锁,(偏向锁就是这个时候升级为轻量级锁的)。如果不存在使用了,则可以将对象回复成无锁状态,然后重新偏向。

把时间冻结 2022-09-18 23:36:31

最近也在研究这部分,我理解线程B利用CAS偏向对象头中锁时,即占用临界区。此时线程A也就失去锁。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文