读写锁学习笔记

news2024/10/7 12:18:49

1、数据结构

读锁是共享模式,写锁是独占模式,两个锁也公用一个AQS

两者共用一个state来表示,state前16位表示读锁,后16位表示写锁

读锁操作

通过向右位移16位,然后进行操作

写锁操作

通过和0000 0000 0000 0000 1111 1111 1111 1111与运算,就可以得到后面16位

由于16位最大全1表示为65535,所以读锁和写锁最多可以获取65535个

2、写锁

获取

代码

逻辑

释放

代码

逻辑

3、读锁

加锁

代码

逻辑

解锁

代码

逻辑

4、锁降级

概念

锁降级其实就是一种特殊的重入机制,也就是写锁变成读锁的一个过程,虽然写锁和读写实际上并没有高低级之分

实现方式

先获取写入锁,然后获取读取锁,最后释放写锁。但是,从读取锁升级到写入锁是不可能的

原因

一派(主流)的描述:没有感知到数据变化的写锁冲进来会继续占用写锁,阻塞已完成写操作的线程去继续获取读锁,修改了数据导致已完成写操作的线程感受不到数据被修改了

二派的描述:为了性能,因为读锁的抢占必将引起资源分配和判断等操作,降级锁减少了线程的阻塞唤醒,实时连续性更强

5、理解

1、读锁和写锁都能重入

2、读读不互斥、读写互斥、写写互斥

3、写锁阻塞写之后的读写锁,但是不阻塞写锁之前的读锁线程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1460116.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CheatEngine基础进阶篇

我们在上一篇文章里说了CE的安装,汉化以及最基础最基础的值扫描和修改方法,当然很多游戏不能通过这些简单的手段就能达到修改值的效果,因此我们还需要掌握以下几个重要的知识点: 指针寻址 上一步阐述了如何使用"代码查找"功能对付变化位置的数据地址,但这种方法…

【医学大模型 逻辑准确】PLPF:将医生诊断逻辑集成到大模型

PLPF:将医生诊断逻辑集成到大模型 提出背景规则建模偏好数据构建人类偏好对齐 实验结果不同模型对比论文复现 提出背景 论文:https://arxiv.org/pdf/2401.05695.pdf 起始问题: 如何提高大型语言模型(LLMs)在医疗对话生成中的逻辑…

docker (八)-dockerfile制作镜像

一 dockerfile dockerfile通常包含以下几个常用命令: FROM ubuntu:18.04 WORKDIR /app COPY . . RUN make . CMD python app.py EXPOSE 80 FROM 打包使用的基础镜像WORKDIR 相当于cd命令,进入工作目录COPY 将宿主机的文件复制到容器内RUN 打包时执…

CV论文--2024.2.21

source:CV论文--2024.2.21 1、Binary Opacity Grids: Capturing Fine Geometric Detail for Mesh-Based View Synthesis 中文标题:二元不透明度网格:捕获精细的几何细节以进行基于网格的视图合成 简介:尽管基于表面的视图合成算法由于其低计…

uni-app常用组件 App开发 小程序开发 这篇就够了

目录 一、uni-app官网网址 二、uni-app常用组件 1.视图容器 1.1 view 1.2 scroll-view 1.3 swiper 1.4 movable-area 1.5 movable-view 2.基础内容 2.1 icon 2.2 text 2.3 rich-text 3.表单组件 3.1 button 3.2 checkbox-group 3.3 form 3.4 input 3.5 label…

[经验] 什么是鄱阳湖旅游最主要的景点 #知识分享#知识分享

什么是鄱阳湖旅游最主要的景点 鄱阳湖是中国最大的淡水湖,位于江西省北部和湖南省南部。鄱阳湖旅游资源丰富,景色秀美,是游客游览江西最热门的旅游胜地之一。在所有的景点中,以下是鄱阳湖旅游中最主要的景点。 景点一&#xff1…

六西格玛培训对职场和财务的长期影响——张驰咨询

在当今竞争激烈的商业环境中,公司不断寻求提高质量和效率的方法,六西格玛(Six Sigma)作为一种旨在减少缺陷、提升产品和服务质量的管理策略,成为了很多企业的选择。然而,实施六西格玛需要专业的培训和认证&…

银河麒麟系列产品全新介绍——麒麟天御安全域管平台

麒麟天御安全域管平台是麒麟软件自主研发的新一代终端系统域管理平台,是专门针对银河麒麟操作系统环境下大规模的域用户和终端管理需求而设计。该平台聚焦用户身份验证、权限、访问控制、集中化管理、单点登录、策略等多个领域,提供组织管理、用户管理、终端管理、任务管理、软…

【python】windowslinux系统python的安装

一、python官网及下载路径 官网地址:Welcome to Python.org 下载路径:Download Python | Python.org ​​​​​​​ linux源码安装包下载: windows二进制安装包下载: 二、Linux如何安装python 2.1 单版本安装 以安装python…

防御保护---内容保护

文章目录 目录 文章目录 一.防火墙内容安全概述 二.深度识别技术(DFI/DPI) 深度包检测技术(DPI) 深度流检测技术(DFI) 两者区别 三.入侵防御IPS 一.防火墙内容安全概述 防火墙内容安全是防火墙的一个重…

即时设计和sketch对比

在设计领域,有很多易于使用的设计软件,每个软件都有自己的特点,但在使用中也会有一些限制。例如,传统的Sketch。Sketch是一款古老的UI设计软件。自2010年推出以来,已有10多年的历史,但它始终仅限于MAC。到目…

java中实体pojo对于布尔类型属性命名尽量别以is开头,否则 fastjson可能会导致属性读取不到

假如我们有一个场景,就是需要将一个对象以字符串的形式,也就是jsonString存到一个地方,比如mysql,或者redis的String结构。现在有一个实体,我们自己创建的,叫做CusPojo.java 有两个属性是布尔类型的&#x…

微调实操三:人类反馈对语言模型进行强化学习(RLHF)

1、前言 前面我们在《微调实操一: 增量预训练(Pretraining)》和《微调实操二: 有监督微调(Supervised Finetuning)》实操的两个章节,学习了PT(Continue PreTraining)增量预训练和SFT(Supervised Fine-tuning)有监督微调过程,,今天我们进入第三阶段的微调…

【微服务生态】Docker

文章目录 一、基础篇1. 简介2. 下载与安装3. 常用命令3.1 帮助启动类3.2 镜像命令3.3 容器命令 4. Docker 容器数据券5. Docker 镜像5.1 commit 生成镜像5.2 Docker Registry5.3 发布镜像 6. Docker 常规安装软件 二、高级篇1. Dockerfile1.1 概述1.2 基础知识1.3 Dockerfile常…

软件测试工程师经典面试题

软件测试工程师,和开发工程师相比起来,虽然前期可能不会太深,但是涉及的面还是比较广的。前期面试实习生或者一年左右的岗位,问的也主要是一些基础性的问题比较多。涉及的知识主要有MySQL数据库的使用、Linux操作系统的使用、软件…

豆粕贸易商的二次点价策略:如何在价格波动中获得收益补贴?

贸易商如何通过衍生品工具实现二次点价? 贸易商交易惯例:以豆粕贸易商和油厂签订的基差采购合同为例,同理可以类推至其他板块上下游企业。 按照交易惯例,贸易商通常会持有基差合同,但并不会先点价。当价格从高点到低…

饮用水、地下水深度去除全氟烷基物质的技术

摘要:全氟烷基物质(PFAS)是一组广泛存在于环境中的化学物质,对人体健康构成潜在威胁。本文将探讨PFAS的来源、危害以及饮用水处理中去除PFAS的方法,特别是离子交换树脂技术的应用,以期为公众提供环境保护和…

智慧水利数字孪生可视化,满屏黑科技!A3D引擎支持,免费即可搭建

2024年1月,在北京召开的全国水利工作会议,强调了要大力推进数字孪生水利建设,全面提升水利监测感知能力。 除此之外,2035年远景目标也提出:构建智慧水利体系,以流域为单元提升水情测报和智能调度能力。《数…

pom.xml常见依赖及其作用

1.org.mybatis.spring.boot下的mybatis-spring-boot-starter:这个依赖是mybatis和springboot的集成库,简化了springboot项目中使用mybatis进行持久化操作的配置和管理 2.org.projectlombok下的lombok:常用注解Data、NoArgsConstructor、AllA…

C语言二级易忘易错易混知识点(自用)

1.数组名不能自加。 因为数组名实际上是一个指针,指向数组的第一个元素的地址。数组名在编译器中被视为常量,它的值是固定的,不能改变。 要访问数组的不同元素,应该使用数组名加上偏移量的方式来访问。 2.共用体只有最后一次赋值…