读写锁学习笔记

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.mzph.cn/news/693963.shtml

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

相关文章

【Spring连载】使用Spring Data访问 MongoDB(二)----Template API

【Spring连载】使用Spring Data访问 MongoDB(二)----Template API 一、方便的方法二、执行回调函数Execute Callbacks三、Fluent API四、异常转换五、域类型映射六、配置6.1 默认读取首选项Read Preference6.2 WriteResultChecking策略6.3 默认写安全Wri…

同一台宿主机上虚拟机CPU资源分配方式介绍

同一台物理机上运行多个虚拟机时,虚拟机之间的 CPU 资源分配方式通常有以下几种: 份额(Share):为每个虚拟机分配一定的 CPU 份额,表示该虚拟机在 CPU 时间片分配中所占的比例。份额越高,虚拟机获…

VR全景在文旅景区方面的应用有哪些?

文旅是一个大消费行业,核心是面对C端客户,因此用户的体验非常重要。在这个基础上文旅景区是希望将风景传播给更多人,因此传播和裂变也是文旅行业所需的,而VR全景技术正好可以满足文旅景区所有的价值要素。 VR全景在文旅景区方面的…

预训练大模型LLM的微调PEFT(概述)

前言 大模型现在已经不是什么新奇玩意了,大家都耳熟能详,我们都知道大模型要从头到尾的训练,需要巨大的人力物力,如此高昂的费用小公司是难以承受的,那么我们是否可以像牛顿一样,站在巨人的肩膀上&#xf…

2000-2022年上市银行相关指标数据

2000-2022年上市银行相关指标数据 1、时间:2000-2022年 2、来源:附在文件内,见表格名称 3、指标:证券代码、证券简称、上市日期、上市公司(银行)类型、不良贷款余额、不良贷款拨备覆盖率、不良贷款比率、净利差、净息差、净息差…

el-button 选择与非选择按钮批量处理

el-button 选择与非选择按钮批量处理 <el-button v-for"(voyage,i) in data[voyages][nowVoyage]":key"i"class"c-work-bts"type"primary":plain"nowWorkSpace!i"click"chooseWorkSpace(i)"size"small&qu…

判断一个dll/exe是32位还是64位

通过记事本判断&#xff08;可判断C或者C#&#xff09; 64位、将dll用记事本打开&#xff0c;可以看到一堆乱码&#xff0c;但是找到乱码行的第一个PE&#xff0c;如果后面是d?则为64位 32位、将dll用记事本打开&#xff0c;可以看到一堆乱码&#xff0c;但是找到乱码行的第…

龙讯旷腾PWmat用户福利,DFTB紧束缚法上线!

DFTB介绍 DFTB是基于密度泛函理论的紧束缚方法&#xff08;Density Functional based Tight binding method&#xff09;。其融合了DFT的准确性和紧束缚方法(TB)的高效性&#xff0c;是一种近似DFT的方法。通过使用预先计算的参数、最小基组、仅考虑最近邻相互作用&#xff0c…

Prometheus+influxdb1.8实现高可用监控系统

背景 Prometheus是业内有名的开源监控工具&#xff0c;我所在的公司也是采用PrometheusGrafana方式构建监控系统&#xff0c;并且不只是监控运维层面的数据&#xff0c;业务层面的服务状态也通过Java代码的客户端micrometer向Prometheus提交数据并在Grafana上配置出图&#xf…

[小记]shell获取git最近一次提交信息

‘%H’: commit hash ‘%h’: abbreviated commit hash ‘%T’: tree hash ‘%t’: abbreviated tree hash ‘%P’: parent hashes ‘%p’: abbreviated parent hashes ‘%an’: author name ‘%aN’: author name (respecting .mailmap, see git-shortlog[1] or git-bl…

day2:信号与槽

思维导图 使用手动连接&#xff0c;将登录框中的取消按钮使用t4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断u界面上输入的账号是否为"123",密码是否为"…

【2024软件测试面试必会技能】allure测试报告(3): allure测试报告的用例描述设置

allure测试报告的用例描述相关方法&#xff1b;如下图 allure标记用例级别severity 在做自动化测试的过程中&#xff0c;测试用例越来越多的时候&#xff0c;如果执行一轮测试发现了几个测试不通过&#xff0c;我们也希望能快速统计出缺陷的等级。 pytest结合allure框架可以对…

R语言【base】——data.frame():创建数据框,紧耦合的变量集合,它们共享矩阵和列表的许多属性,被大多数R建模软件用作基本数据结构。

Package base version 4.2.0 Description 创建数据框&#xff08;data frame&#xff09;&#xff0c;紧耦合的变量集合&#xff0c;它们共享矩阵和列表的许多属性&#xff0c;被大多数R建模软件用作基本数据结构。 数据框&#xff1a;一种在统计分析和数据处理中常用的数据结…

二叉搜索树(二叉排序树、二叉查找树)

二叉搜索树&#xff08;二叉排序树、二叉查找树&#xff09; 一、定义二、操作&#xff08;一&#xff09;中序遍历&#xff08;二&#xff09;查找&#xff08;三&#xff09;插入&#xff08;四&#xff09;删除 三、二叉搜索树的应用四、二叉搜索树操作的性能分析五、总结 一…

解锁服务器外联:TinyProxy一键搭建指南

引言 在服务器需要访问外网的情况下&#xff0c;由于网络安全等原因&#xff0c;许多生产服务器限制了对外网的访问。本文介绍如何通过在一台能够访问外网的服务器上部署TinyProxy来实现代理&#xff0c;使得其他服务器可以通过该代理访问外网。 安装 TinyProxy是一个轻量级…

java异常处理设计

异常的继承体系 java 中的异常的超类是 java.lang.Throwable(后文省略为 Throwable), 他有俩自类Exception和Error&#xff0c;Error是由jvm管理&#xff0c;我们不需要考虑。 RuntimeException是Exception的子类。 检查异常&#xff08;Checked Exceptions&#xff09;&#…

【kubernetes】认识K8S基础理论

目录 一、k8s是什么&#xff1f; 二、为什么要用k8s&#xff1f; 三、k8s的主要功能 四、k8s的集群架构和组件 4.1k8s的集群架构介绍 4.2k8s的master的核心组件 ①kube-apiserver&#xff1a;作为所有服务请求的统一访问入口 ②kube-controller-manager&#xff1a;控制…

腾讯云域名解析

腾讯云域名解析 1.登录腾讯云控制台&#xff0c;点击“云产品”&#xff0c;选择“云解析”&#xff0c;进入云解析界面&#xff1b;2.在此界面可以选择购买或者添加新的域名&#xff0c;若已经购买了域名&#xff0c;则在域名列表处选择需要解析的域名&#xff0c;点击“解析…

用Python实现学生成绩数据分析

我的代码使用了pygal库来创建一个简单的折线图&#xff0c;并将其保存为SVG格式的文件。下面是对您代码的分析&#xff1a; 学生成绩数据分析表&#xff1a; 分析代码&#xff1a; 导入库&#xff1a;您导入了pygal库&#xff0c;这是一个用于生成可缩放矢量图形&#xff08;S…

Chrome插件精选 — 颜色拾取

Chrome实现同一功能的插件往往有多款产品&#xff0c;逐一去安装试用耗时又费力&#xff0c;在此为某一类型插件挑选出比较好用的一款或几款&#xff0c;尽量满足界面精致、功能齐全、设置选项丰富的使用要求&#xff0c;便于节省一个个去尝试的时间和精力。 1. ColorZilla 下…