读写锁学习笔记

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,一经查实,立即删除!

相关文章

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

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

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…

day2:信号与槽

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

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

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

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

二叉搜索树&#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 下…

vue保留用户在列表的操作记录, beforeRouteLeave离开当前组件缓存数据即可

最近遇到一个需求,用户在列表页的查询输入框输入条件后,点击查询,然后此时切换菜单,再回到之前的页面,希望能停留在上一次输入的结果上,如下例子,用户管理页面,输入yangfan这个关键词搜索后,结果如下图: 当我此时点击权限管理后,再点击用户管理切回来,结果依旧如上…

如何修改docker容器的端口映射

要修改 Docker 容器的端口映射&#xff0c;你需要停止并删除现有的容器&#xff0c;然后使用新的端口映射重新运行容器。以下是详细步骤&#xff1a; 停止容器&#xff1a; 使用 docker stop 命令停止正在运行的容器。替换 <container_id> 为你要停止的容器的 ID 或者容器…

什么是智慧公厕?智慧公厕是基于“云大脑”的跨区域公共厕所综合管理系统

在城市快速发展的今天&#xff0c;公共厕所的管理和维护成为了一个重要的问题。传统的公共厕所管理方式往往效率低下、成本较高。然而&#xff0c;随着科技的进步和应用&#xff0c;智慧公厕已经成为了解决这一难题的利器。本文以智慧公厕源头厂家广州中期科技有限公司&#xf…

信息安全工程师 软考回顾(一)

&#x1f433;概述 图源&#xff1a;文心一言 信息安全证书已经考了一年有余&#xff0c;尽管我目前没有从业安全的打算&#xff0c;况且自己的实践能力与从业标准依然有所差距&#xff0c;但其中的内容也值得再温习一遍~&#x1f95d;&#x1f95d; 另外&#xff0c;如果你对…

四、深入学习TensorRT,Developer Guide篇(三)

上一篇文章我们一起看了下TensorRT有哪些特性或者支持哪些功能&#xff0c;这一节我们来详细的从API出发研究一下具体的实现&#xff0c;难度要上升了哦&#xff0c;请系好安全带&#xff0c;准备发车&#xff01; 文章目录 3. The C API3.1 The Build Phase3.1.1 Creating a …