读锁和写锁

读锁: 是共享锁,读锁与读锁是可以兼容的,所以同时有多个请求都可以持有

写锁: 是独占锁,写锁与任何锁都互斥,所以只有一个请求持有,这个请求释放写锁其他请求才能持有

一旦持有写锁,说明数据在发送变化就不能读了,自然一个请求就不能出现读锁和写锁共存的情况

总结: 读锁与读锁之间兼容,其他都是互斥

读写锁的实现逻辑转换如下

读锁: 请求要判断是否可以持有共享资源的读锁,需要判断之前是否有请求持有这个共享资源的写锁

写锁: 请求要判断是否可以持有写锁,需要判断是否有请求持有这个共享资源的读锁或者写锁,就是没有请求持有这个共享资源的任何的锁

zookeeper区分分布式锁

区分是那个共享资源的锁,是通过zookeeper路径来区分的
区分一个共享资源是读锁还是写锁这种锁的类型,是通过zookeeper节点名的前缀来区分的

zookeeper实现分布式写锁

1、请求过来的时候都会创建一个临时序号节点

2、获取zookeeper中所有的临时序号节点

3、判断自己是否是最小的节点

        如果是,说明在这个请求之前是没有其他请求获取并持有这个共享资源的读锁或者写锁,目前共享资源访问的第一个请求,我可以获取并持有这个共享资源的写锁

        如果不是,说明已经有请求在我之前获取并持有这个共享资源的写锁或者读锁了,前面有请求获取到写锁或者读锁,我都互斥,自然就获取写锁失败

        获取锁失败之后,监听最小的临时序号节点,如果最小的临时序号节点出现变化,则回到第二步进行执行

zookeeper实现分布式读锁

1、请求过来的时候都会创建一个临时序号节点

2、获取到zookeeper中比自己序号小的所有临时节点

3、判断最小节点是否为读锁(根据写锁的实现原理可知,如果写锁存在,必然是最小临时序号节点)

        如果是读锁,说明这个共享资源目前没有请求持有写锁,直接获取并持有读锁

        如果不是读锁,说明目前第一个请求持有写锁,读锁写锁互斥,获取并持有读锁失败

        获取读锁失败之后,监听最小的临时序号节点,如果最小的临时序号节点出现变化,则回到第二步进行执行

        

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

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

相关文章

第二篇:Linux 文件系统操作:从基础到进阶

目录 一、文件与目录管理基础 创建文件 创建目录 目录结构查看 二、链接文件深入理解 创建软链接 创建硬链接 核心区别对比 三、文件压缩与解压缩全攻略 1、压缩命令对比 2、解压缩命令 3、三种压缩方式性能对比 4、通用解压技巧 四、文件查找与搜索 1、按文件名…

哔哩哔哩招游戏内容产品运营

游戏内容产品运营【2026届】(岗位信息已获jobleap.cn授权转发到csdn)哔哩哔哩集团 上海收录时间: 2025年08月01日职位描述1、负责研究B站游戏创作者的创作过程、动机及遇到的问题,产出研究报告; 2、结合用研分析和相关…

谈谈Flutter中的Key

目录 前言 一、什么是Key 1.StatelessWidget 2.StatefulWidget 3.加入Key后的效果 二、什么时候应该使用 Key? 1.Flutter判断widget的逻辑 1.Flutter判断组件身份的规则 1.Widget的类型(runtimeType)相同 2. Key相同(ke…

重生之我在暑假学习微服务第八天《OpenFeign篇》

个人主页:VON文章所属专栏:微服务 微服务系列文章 重生之我在暑假学习微服务第一天《MybatisPlus-上篇》重生之我在暑假学习微服务第二天《MybatisPlus-下篇》重生之我在暑假学习微服务第三天《Docker-上篇》重生之我在暑假学习微服务第四天《Docker-下篇…

风光储综合能源系统双层优化规划设计【MATLAB模型实现】

本模型基于双层优化框架,利用KKT条件、大M法、对偶理论求解,专注于综合能源系统(微电网)多电源容量优化配置的模型介绍。代码采用CPLEX求解器,注释详尽,非常适合新手学习该类问题的建模与求解思路。 模型总…

雪花算法重复id问题

原理解析 雪花算法实现简单、适配性强,无论是电商订单、日志追踪还是分布式存储,都能满足 “唯一、有序、高效、可扩展” 的核心需求,因此成为分布式ID主流选择。雪花算法生成的ID是一个64位的整数,由多段不同意义的数字拼接而成&…

MQTT 入门教程:三步从 Docker 部署到 Java 客户端实现

在物联网(IoT)与边缘计算快速发展的今天,设备间的高效通信成为核心需求。MQTT 作为一种轻量级的发布 / 订阅模式协议,凭借其低带宽占用、强稳定性和灵活的消息路由能力,已成为物联网通信的事实标准。无论是智能家居的设…

公网服务器上Nginx或者Openresty如何屏蔽IP直接扫描

0x01 背景云服务器很多时候为了通信需要设置公网访问,但是网络当中存在很多的扫描器,无时无刻在扫描,当80,443端口暴露时,成了这些扫描IP的攻击对象,无时无刻收到威胁。0x02 扫描攻击方式1.直接通过公网IP地址进行一些…

C语言(长期更新)第8讲 函数递归

C语言(长期更新) 第8讲:函数递归 跟着潼心走,轻松拿捏C语言,困惑通通走,一去不回头~欢迎开始今天的学习内容,你的支持就是博主最大的动力。 目录 C语言(长期更新) 第8讲 函数递归…

[硬件电路-129]:模拟电路 - 继电器的工作原理、关键指标、常用芯片与管脚定义

一、工作原理继电器是一种基于电磁感应原理的自动开关装置,通过控制小电流电路实现大电流电路的通断。其核心结构包括:电磁铁(线圈铁芯):通电时产生磁场,吸引衔铁动作。触点系统:包含常开触点&a…

Haproxy调度算法 - 静态算法介绍与使用

文章目录一、概述二、socat工具三、static-rr四、firstHAProxy通过固定参数 balance 指明对后端服务器的调度算法,该参数可以配置在listen或backend选项中。HAProxy的调度算法分为静态和动态调度算法,但是有些算法可以根据参数在静态和动态算法中相互转换…

模拟激光相机工作站版本6.0 5.2.32 6.0.44 6.031 5.2.20

模拟激光相机工作站版本6.0 5.2.32 6.0.44 6.031 5.2.20

AWS Blockchain Templates:快速部署企业级区块链网络的终极解决方案

无需精通底层架构,一键搭建Hyperledger Fabric或以太坊网络!AWS Blockchain Templates 可帮助您快速基于不同的区块链框架在 AWS 上创建和部署区块链网络。区块链是一种分布式数据库技术,用于维护不断增长的交易记录和智能合约集合&#xff0…

Vue 服务端渲染 Nuxt 使用详解

Nuxt 是基于 Vue 的高层框架,专注于服务器端渲染应用开发。它封装了繁琐的配置和通用模式,提供了开箱即用的 SSR 功能,使开发者能够专注于编写业务逻辑。 1. Nuxt 的核心特性 SSR 支持:默认支持服务端渲染,提高应用性…

使用ACK Serverless容器化部署大语言模型FastChat

核心概念 阿里云ACK Serverless:是一种基于 Kubernetes 的无服务器容器服务。用户无需管理底层节点和服务器,即可快速部署容器化应用,并根据实际使用的 CPU 和内存资源按需付费,只专注于应用本身而非基础设施管理。 FastChat&…

最新Android Studio汉化教程--兼容插件包

[ ] 软件版本:Android Studio Meerkat Feature Drop | 2024.3.2 Build #AI-243.25659.59.2432.13423653, built on April 30, 2025 Runtime version: 21.0.613368085-b895.109 amd64 VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o. Toolkit: sun.awt.windows.WT…

Unity_数据持久化_IXmlSerializable接口

Unity数据持久化 三、XML数据持久化 3.5 IXmlSerializable接口 3.5.1 IXmlSerializable接口基础概念 什么是IXmlSerializable接口: IXmlSerializable 是.NET框架提供的一个接口,允许类自定义XML序列化和反序列化的过程。当默认的XML序列化行为无法满足需…

如何快速解决PDF解密新方法?

有时从网络下载的PDF文档会带有加密限制,导致无法编辑、复制或打印。它的体积仅约10MB,无需安装,解压即用。遇到受限制的文件时,只需将其拖入界面,选择是否覆盖原文件,点击执行,瞬间完成解密。「…

译|数据驱动智慧供应链的构成要素与关联思考

数据质量,通过识别关键决策和瓶颈构建信息供应链。该模型适用于优化库存管理、自动化物流、预测需求、实现产品全生命周期追溯及应对突发风险。例如,通过AI机器人自动管理仓库,或利用数字孪生模拟和优化全球采购网络。 汇总来自三篇文章&…

OS21.【Linux】环境变量

目录 1.与环境变量有关的实验 A.对比命令和自制程序的运行 为什么.像ls、pwd这样的命令运行是不需要加路径? 执行自制程序而不加路径的方法,看看PATH环境变量 方法1:将自制程序移动到系统的搜索路径下 方法2:临时修改PATH环境变量 B.查看系统中所有环境变量 解释几个常…