当前位置: 首页 > news >正文

ReentrantReadWriteLock、StampedLock

ReentrantLock、ReentrantReadWriteLock、StampedLock

读写锁

一个资源可以被多个读线程访问,或者被一个写线程访问,但是不能同时存在读写线程。

小口诀:读写互斥,读读共享

锁的演变

无锁-----> 独占锁----->读写锁----->邮戳锁

请添加图片描述

ReentrantReadWriteLock读写锁

ReentrantReadWriteLock读写锁并不是真正意义上的读写分离,它只允许读读共存,读写和写写依然是互斥的

使用场景:读多写少的情况下适合使用读写锁

缺点

1.锁饥饿:一直都是读线程获得锁,写线程抢不到锁

2.锁降级:遵循获取写锁----->再获取读锁----->再释放写锁的次序,写锁能够降级成为读锁

如果一个线程占有写锁,在不释放写锁的情况下,它还能占有读锁,即写锁降级为读锁

写锁降级读锁可以,读锁降级到写锁不可以

代码证明

请添加图片描述
请添加图片描述

结果也证实,在获取写锁后不需要释放写锁就可以直接获取读锁,也就是锁降级

接下来证明相反情况,读锁到写锁,先说结论读锁到写锁需要先释放读锁才能获取到写锁
请添加图片描述

请添加图片描述

小问题

为什么需要锁降级,也就是为什么获取写锁还可以获取读锁,这样做的意义是什么?

答:写后立即可以读,在高并发情况下,很可能有多个写操作将资源修改,造成数据紊乱,锁降级可以在写锁内再获取读锁,由于读写互斥,所以其他写操作必须等到读锁释放才能获取写锁。

由此可以知道读写锁会导致锁饥饿,为解决该问题,邮戳锁提出解决方案

StampedLock 邮戳锁

特点

1.所有获取锁的方法,都返回一个邮戳(Stamp),Stamp为零表示获取失败,其余表示成功

2.所有释放锁的方法,都需要一个邮戳(Stamp),这个Stamp必须是和成功获取锁时得到的Stamp一致

3.StampLock是不可重入的(如果一个线程已经持有写锁,再去获取写锁就会造成死锁)

StampLock的三种访问模式

1.Reading(读模式):功能与ReentrantReadWriteLock的读锁类似

2.Writing(写模式):功能和ReentrantReadWriteLock的写锁类似

3.Optimistic reading(乐观读模式):无锁机制,类似数据库中的乐观锁,支持读写并发,很乐观的认为读取时没人修改,假如被修改再实现锁升级为悲观读模式

缺点:(工作中不要用)

1.StampLock不支持重入

2.StampLock的悲观读锁和写锁都不支持条件变量(Condition)

3.使用StampLock不要调用interrupt()方法

相关文章:

ReentrantReadWriteLock、StampedLock

ReentrantLock、ReentrantReadWriteLock、StampedLock 读写锁 一个资源可以被多个读线程访问,或者被一个写线程访问,但是不能同时存在读写线程。 小口诀:读写互斥,读读共享 锁的演变 无锁-----> 独占锁----->读写锁---…...

Mysql中的事务、锁、日志详解

一、事务 1.事务特性及保证事务特性的原理 原子性:当前事务的操作要么全部成功,要么全部失败。原子性由undo log实现,undo log记录了每次操作之前的数据版本,如果某一操作失败,可以根据undo log回滚到最初状态。一致…...

k8s笔记24--安装metrics-server及错误处理

k8s笔记24--安装metrics-server及错误处理1 介绍2 安装3 常见错误第一次错误 持续 Failed probe第二次错误 bad status code "403 Forbidden"4 说明1 介绍 最近一个同事在老版本的 k8s 上安装metrics-server,pod一直处于running 非就绪状态,经…...

【电商】订单系统--售后的简易流程与系统关系

用户进行了订单签收并不意味着终结,这只是一个新的开始,因为商品送达后可能会由于运输过程包装或商品有破损,商品本质量并非商品详情中所描述的那样等各种原因使用户进行退货或换货;还有一种场景是用户签收后发现有的商品漏发、少…...

低代码开发平台|生产管理-成本核算搭建指南

1、简介1.1、案例简介本文将介绍,如何搭建生产管理-成本核算。1.2、应用场景计算主生产及子生产计划的工序成本、领料成本,统计出总的生产成本金额。2、设置方法2.1、表单搭建1)新建表单【商品信息】,字段设置如下;名称…...

Xshell 安装及使用方法

公网地址:47.XXX.XXX.229 私网地址:172.XXX.128.XXX 用户:root 密码:1234561,百度xshell,下载,安装Xshell 2,填写配置及使用方式 主机:47.XXX.XXX.229 用户:root 密码&a…...

【Axure教程】转盘抽奖原型模板

转盘抽奖是营销活动中很常用的一种方式,在线上我们也可以经常看到转盘抽奖的活动,所以今天作者就教大家在Axure中怎么制作一个转盘抽奖的原型模板。一、效果展示1、可以随机转动轮盘,轮盘停止时,指针对着的奖品高亮显示2、可以重复…...

量子比特大突破!原子薄材料成为“救世主”

(图片来源:网络)量子计算是一项极其复杂的技术,现阶段的一些挑战正严重阻碍着它的发展,尤其是量子比特的小型化和质量问题。IBM计划在2023年实现具有1121个超导量子比特的处理器。以目前的技术手段,要达到这…...

Swagger3 API接口文档规范课程(内含教学视频+源代码)

Swagger3 API接口文档规范课程(内含教学视频源代码) 教学视频源代码下载链接地址:https://download.csdn.net/download/weixin_46411355/87431932 目录Swagger3 API接口文档规范课程(内含教学视频源代码)教学视频源代…...

数据库的基本操作

查看数据库语法格式:SHOW {DATABASES | SCHEMAS}[LIKE pattern | WHERE expr]#查看全部数据库mysql> show databases; -------------------- | Database | -------------------- | information_schema | | mysql | | performance_schema …...

分享5个超好用的Vue.js库

开发人员最好的朋友和救星就是这些第三方库,无论是开发新手还是经验丰富的老手,我们都喜欢开源软件包。借助开源库加速Vue项目的开发进度是现代前端开发比较常见的方式,这几个 Vue.js库,建议尽早用上,加速你的项目开发…...

第四章.误差反向传播法—ReLU/Sigmoid/Affine/Softmax-with-Loss层的实现

第四章.误差反向传播法 4.2 ReLU/Sigmoid/Affine/Softmax-with-Loss层的实现 1.ReLU层 1).公式 2).导数&#xff1a; 3).计算图&#xff1a; 4).实现&#xff1a; class ReLU:def __init__(self):self.mask None# 正向传播def forward(self, x):self.mask (x < 0) # 输入…...

Python-第二天 Python基础语法

Python-第二天 Python基础语法一、 字面量1.1 常用的值类型1.1.1 字符串&#xff08;string&#xff09;二、注释2.1 注释的作用2.2 注释的分类三、变量3.1 什么是变量3.2 变量的特征四、数据类型4.1 数据类型4.2 type()语句4.3 type()语句的使用方式4.4 变量有类型吗&#xff…...

命令模式包含哪些主要角色?怎样实现命令?

命令模式包含以下主要角色&#xff1a;抽象命令类&#xff08;Command&#xff09;角色&#xff1a; 定义命令的接口&#xff0c;声明执行的方法。具体命令&#xff08;Concrete Command&#xff09;角色&#xff1a;具体的命令&#xff0c;实现命令接口&#xff1b;通常会持有…...

SpringCloud-Feign

Spring Cloud中集成Feign (只是笔记而已 其中有点命名啥的不对应&#xff0c;搜到了就划走吧) Feign--[feɪn]&#xff1a;Web 服务客户端&#xff0c;能够简化 HTTP 接口的调用。 没有Feign的之前服务提供者 package com.springcloudprovide.controller;import com.springclo…...

XCP实战系列介绍08-基于Vehicle Spy进行XCP测量的工程配置详解

本文框架 1.概述2. 工程配置步骤2.1 创建MEP工程2.1.1 添加A2L文件2.1.2 CAN收发ID配置2.2 MEP属性设置2.2.1 ECU属性设置2.2.2 MEP的Security设置2.3 DAQ设置2.3.1创建DAQ2.3.2 list中测量及标定量的添加和设置2.3.3 设置DAQ list中变量的event1.概述 在前面一篇文章《看了就…...

JVM调优几款好用的内存分析工具

对于高并发访问量的电商、物联网、金融、社交等系统来说&#xff0c;JVM内存优化是非常有必要的&#xff0c;可以提高系统的吞吐量和性能。通常调优的首选方式是减少FGC次数或者FGC时间&#xff0c;以避免系统过多地暂停。FGC达到理想值后&#xff0c;比如一天或者两天触发一次…...

Vue中路由缓存及activated与deactivated的详解

目录前言一&#xff0c;路由缓存1.1 引子1.2 路由缓存的方法1.2.1 keep-alive1.2.2 keep-alive标签中的include属性1.2.3 include中多组件的配置二&#xff0c;activated与deactivated2.1 引子2.2 介绍activated与deactivated2.3 解决需求三&#xff0c;整体代码总结前言 在Vu…...

【漏洞复现】phpStudy 小皮 Windows面板 RCE漏洞

文章目录前言一、漏洞描述二、漏洞复现前言 本篇文章仅用于漏洞复现研究和学习&#xff0c;切勿从事非法攻击行为&#xff0c;切记&#xff01; 一、漏洞描述 Phpstudy小皮面板存在RCE漏洞&#xff0c;通过分析和复现方式发现其实本质上是一个存储型XSS漏洞导致的RCE。通过系…...

跨域小样本系列2:常用数据集与任务设定详解

来源&#xff1a;投稿 作者&#xff1a;橡皮 编辑&#xff1a;学姐 带你学习跨域小样本系列1-简介篇 跨域小样本系列2-常用数据集与任务设定详解&#xff08;本篇&#xff09; 跨域小样本系列3&#xff1a;元学习方法解决CDFSL以及两篇SOTA论文讲解 跨域小样本系列4&#xf…...

别再只写assign了!用三种Verilog建模风格重构你的三人表决器(行为级/数据流/门级)

别再只写assign了&#xff01;用三种Verilog建模风格重构你的三人表决器 三人表决器是数字电路设计中的经典案例&#xff0c;它能直观展示不同抽象层次的Verilog建模风格如何影响代码质量与硬件实现。很多工程师习惯性地使用assign语句完成所有设计&#xff0c;却忽略了Verilo…...

别再只会用OpenCV的equalizeHist了!用Python实战图像增强,让你的目标检测模型精度提升一个台阶

突破OpenCV基础操作&#xff1a;Python图像增强实战与目标检测精度优化 在目标检测项目的实际开发中&#xff0c;我们常常遇到这样的困境&#xff1a;模型在标准测试集上表现优异&#xff0c;一旦部署到真实场景&#xff0c;面对复杂光照、低对比度的图像时&#xff0c;性能却…...

3分钟学会:Windows上安装Android应用的终极简单指南

3分钟学会&#xff1a;Windows上安装Android应用的终极简单指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 想在Windows电脑上运行Android应用却不想安装笨重的安卓…...

D1021UK,125W高功率输出的推挽式DMOS RF FET射频晶体管

简介今天我要向大家介绍的是 TT Electronics/Semelab 的金金属化多用途硅DMOS RF FET晶体管——D1021UK。这是一款专为HF/VHF/UHF通信频段&#xff08;1 MHz至400 MHz&#xff09;设计的推挽式&#xff08;Push-Pull&#xff09;射频功率场效应管&#xff0c;在28V工作电压下可…...

polars导入csv文件时指定列数据类型

polars导入csv文件时指定列数据类型schema {column1: pl.Int64,column2: pl.Float64,column3: pl.Utf8}df pl.read_csv(data.csv, schemaschema)def pddaoru_csv(filedir):order_5G[承建方,厂家,市名称,统计局区县,数据时间,小区名称,基站ID,小区ID,小区覆盖类别,频段,带宽,小…...

Cadence SKILL脚本实战:5分钟搞定TESTKEY原理图批量创建(附完整代码)

Cadence SKILL脚本实战&#xff1a;5分钟搞定TESTKEY原理图批量创建&#xff08;附完整代码&#xff09; 在集成电路设计领域&#xff0c;TESTKEY&#xff08;测试结构&#xff09;的创建是验证工艺模型和器件特性的基础工作。传统手动放置器件的方式不仅效率低下&#xff0c;还…...

3分钟快速激活Windows和Office:KMS智能激活工具终极指南

3分钟快速激活Windows和Office&#xff1a;KMS智能激活工具终极指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统频繁弹出激活提示而烦恼吗&#xff1f;Office文档突然变成…...

给硬件工程师的芯片FT测试入门:从ATE、Handler到Socket,一次搞懂所有‘治具’

芯片FT测试全流程实战指南&#xff1a;从设备选型到治具配置 第一次走进芯片测试车间时&#xff0c;我被眼前那些闪烁着信号灯的庞大设备和精密治具震撼到了。作为硬件工程师&#xff0c;我们可能更熟悉PCB设计和电路仿真&#xff0c;但当芯片进入量产阶段&#xff0c;如何确保…...

ClaudeCode安装与使用全攻略

一、安装 Claude Code 1. 安装 Claude Code 1.1 安装 Git 根据需求选择对应的安装方式&#xff1a; https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git windows 版本下载地址&#xff1a; https://git-scm.com/install/windows 1.2 安装 node…...

终极指南:3秒预览Office文件,无需安装完整Office套件

终极指南&#xff1a;3秒预览Office文件&#xff0c;无需安装完整Office套件 【免费下载链接】QuickLook.Plugin.OfficeViewer Word, Excel, and PowerPoint plugin for QuickLook. 项目地址: https://gitcode.com/gh_mirrors/qu/QuickLook.Plugin.OfficeViewer 还在为查…...