锁的粗化和细化

简介: 锁的粗化和细化

首先看下结构

Mark Word结构

标志位

无锁标志为01。轻量级所标志位00。重量级锁10

锁粗化

轻量级锁指向当前程序调用栈帧中的lock record锁记录空间 。

当锁的对象没有被锁过。

流程

第一次在当前线程的栈帧中创建一个空间lock record用来记录mark word对象头并通过cas操作(01旧值 00新值)如果cas操作成功表示还是无锁状态并且将对象的mark对象头指向线程中的lockrecord空间,如果操作失败则说明已经是轻量级锁了。

当操作失败时会进行检查对象的markword对象头是否指向的是当前线程栈帧中的lockrecord

1.如果指向当前线程栈帧中的lockrecord那么说明该线程已经获取过该锁那么直接进入同步块中执行操作即可;

2.如果对象的对象头指向的不是当前线程的lockrecord那么说明是两个线程在抢占那么就将锁的标志位设置为10表示进入重量级锁。

此时Mark Word中存储的就是指向重量级锁(互斥量)的指针,并且进入等待获取锁状态也就是阻塞(进行优化后的操作是进行cas自旋不是直接调用系统内核线程的等待阻塞 )

轻量级锁是通过cas进行加锁(粗化)操作,那么我也是通过cas进行释放锁(细化)的操作。

锁细化

释放锁步骤:

1.首先通过cas进行操作(判断旧值是不是还是轻量级锁)

2.如果还是轻量级锁,那么没有存在其他线程的竞争(可进行细化操作了),直接将对象头的数据和lockrecord中的值进行替换;

如果替换失败,则说明有其他线程竞争过(还有线程在竞争锁不能够细化)。

3.如果可以替换,那么在替换完成之后要唤醒等待获取锁的线程。


相关文章
|
11月前
|
数据采集 机器学习/深度学习 人工智能
【大语言模型】人类反馈在大语言模型对齐中的可靠性有多高?
当今的对齐研究大多集中在设计新的学习算法上,使用的是如Anthropic-HH这样的数据集,这些研究假设人类反馈数据本质上是可靠的。然而,对于人类反馈的定性不可靠性及其对对齐的影响,关注甚少。为了填补这一空白,我们进行了一项全面研究,并提供了对人类反馈数据的深入分析。
202 4
|
11月前
|
存储 缓存 数据处理
深度解析:Hologres分布式存储引擎设计原理及其优化策略
【10月更文挑战第9天】在大数据时代,数据的规模和复杂性不断增加,这对数据库系统提出了更高的要求。传统的单机数据库难以应对海量数据处理的需求,而分布式数据库通过水平扩展提供了更好的解决方案。阿里云推出的Hologres是一个实时交互式分析服务,它结合了OLAP(在线分析处理)与OLTP(在线事务处理)的优势,能够在大规模数据集上提供低延迟的数据查询能力。本文将深入探讨Hologres分布式存储引擎的设计原理,并介绍一些关键的优化策略。
528 0
|
11月前
|
SQL 监控 数据处理
SQL数据库数据修改操作详解
数据库是现代信息系统的重要组成部分,其中SQL(StructuredQueryLanguage)是管理和处理数据库的重要工具之一。在日常的业务运营过程中,数据的准确性和及时性对企业来说至关重要,这就需要掌握如何在数据库中正确地进行数据修改操作。本文将详细介绍在SQL数据库中如何修改数据,帮助读者更好
1781 4
|
12月前
|
数据采集 机器学习/深度学习 人工智能
云栖实录 | GenAI 时代 AI Infra 工程技术趋势与平台演进
本文根据2024云栖大会实录整理而成,演讲信息如下: 演讲人:林伟 | 阿里云智能集团研究员、阿里云人工智能平台 PAI 负责人;黄博远|阿里云智能集团资深产品专家、阿里云人工智能平台 PAI 产品负责人 活动:2024 云栖大会 - AI Infra 核心技术专场、人工智能平台 PAI 年度发布专场
|
机器学习/深度学习 数据挖掘 数据中心
利用机器学习优化数据中心能效的策略研究
【4月更文挑战第24天】在数据中心管理和运营中,能效优化是一个长期存在的挑战,它直接关系到成本控制和环境影响的减轻。随着人工智能技术的不断进步,特别是机器学习(ML)方法的广泛应用,为解决数据中心能效问题提供了新的途径。本文旨在探讨如何通过机器学习技术对数据中心的能源消耗进行建模、预测和优化,以实现更高的能效。我们首先分析了数据中心能耗的主要组成部分,然后提出了一种基于机器学习的能效优化框架,并详细阐述了关键技术和方法。最后,通过实验验证了所提出策略的有效性,并讨论了未来的研究方向。
|
11月前
【初阶数据结构】打破递归束缚:掌握非递归版快速排序与归并排序
【初阶数据结构】打破递归束缚:掌握非递归版快速排序与归并排序
124 4
|
存储 前端开发 JavaScript
深入了解JavaScript:声明式与命令式编程
深入了解JavaScript:声明式与命令式编程
|
Java 开发工具 Android开发
插件化 · 入门篇 · 2023年插件化学习,从Activity开始
插件化 · 入门篇 · 2023年插件化学习,从Activity开始
436 0
插件化 · 入门篇 · 2023年插件化学习,从Activity开始
|
Web App开发 数据采集 JavaScript
剑走偏锋,正经程序员都在用的无头浏览器到底有多神奇?
浏览器是再熟悉不过的东西了,几乎每个人用过,比如 Chrome、FireFox、Safari,尤其是我们程序员,可谓开发最强辅助,摸鱼最好的伴侣。 浏览器能干的事儿,无头浏览器都能干,而且很多时候比标准浏览器还要更好 用,而且能实现一些很好玩儿的功能,我们能借助无头浏览器比肩标准浏览器强大的功能,而且又能灵活的用程序控制的特性,做出一些很有意思的产品功能来,稍后我们细说。
普通用户启动 supervisor 报 HTTP 错误(strace)
今天操作生产环境的时候,报的错误令人懵逼,SRE 同学折腾了好久,配置来配置去,搞不明白为啥 www 就是启动不了 supervisor !
165 0