线程安全的锁策略,你到底忽略了多少?

news/2024/7/24 13:36:16/

线程安全的锁策略,你到底忽略了多少?

文章目录

  • 线程安全的锁策略,你到底忽略了多少?
    • 一,🔰乐观锁vs悲观锁
    • 二,📍轻量级锁 vs 重量级锁
    • 三,📍自旋锁 vs 挂起等待锁
    • 四,📍互斥锁 vs 读写锁
    • 五,📍可重入锁 vs 不可重入锁
    • 六,📍公平锁 vs 非公平锁

一,🔰乐观锁vs悲观锁

锁的实现者,预测接下来锁冲突的概率高还是低,根据冲突概率,来进行相应的操作。

乐观锁🔒:预测冲突概率较小,对锁冲突保持积极态度

悲观锁🔒:预测冲突概率较大,对锁冲突保持消极态度

二,📍轻量级锁 vs 重量级锁

轻量级锁🔒:加锁解锁更快更加高效

重量级锁🔒:加锁解锁非常慢十分低效

三,📍自旋锁 vs 挂起等待锁

自旋锁🔒:(轻量级锁)在解锁后,自旋锁会不停歇的寻找下一个锁,自旋锁是一种纯用户态的锁,因为是轻量级锁,所以消耗的资源少,不过长时间寻找锁也会导致CPU消耗,而且在寻找锁时是不能做其他任务的。

  • 速度快,可以第一时间拿到锁,消耗CPU资源(忙等)

挂起等待锁🔒:(重量级锁)在解锁后,挂起等待锁会自动放弃等待时机,相当于挂起等待锁不会去一直等待锁,而是需要锁时,而且锁是空闲状态,才会进行加锁,自旋锁是一种内核态的锁,因为是重量级锁,所以消耗的资源多。

  • 锁被释放,无法第一时间拿到锁,不消耗CPU资源

四,📍互斥锁 vs 读写锁

互斥锁🔒:进入锁加锁,出锁则解锁

读写锁🔒:锁如其名,对数据的读加锁,对数据的写加锁,然后再进行完操作后,解锁。

两把锁之间的约定读数据时无竞争,写数据存在竞争,读写数据也存在竞争

五,📍可重入锁 vs 不可重入锁

可重入锁🔒:一把锁,针对一个线程加锁两次,该线程满足不死锁的条件时,就叫做可重入锁。

不可重入锁🔒:只能加锁一次,如果对其再加锁会造成死锁(阻塞)。第一个锁释放的条件是要求第二个锁加锁,意识就是,a被锁了,要解开a,必须把a的外层进行加锁,不过这种现象几乎就是死锁了。

synchronized是一个可重入锁,在执行加锁操作时,会先判定是否会造成死锁,也就是对其线程判定一下是否在此之前已经加锁,如果已经加锁,会进行解锁,同一线程的加锁操作,直接‘放行’。

六,📍公平锁 vs 非公平锁

遵守先来先执行的锁是公平锁,反之就是非公平锁。

公平锁🔒:先来后到

非公平锁🔒:后来先到

在系统中对线程的调度是随机的,synchronized是一个非公平锁,如果需要实现一个公平锁,需要对锁中加入一个队列来记录加锁程序的顺序。

总结:synchronized可以是乐观锁,也可以是悲观锁,也可能是轻量级 (自旋锁),也可以是重量级(挂起等待锁),synchronized是一个可重入锁,synchronized是一个非公平锁


http://www.ppmy.cn/news/46324.html

相关文章

基因家族分析及SCI写作技巧

详情点击链接:基因家族分析及SCI写作技巧 一,文献研读和方法​ 1.基因家族分析文献; 2.基因组学分析技巧; 3.生物信息大数据分析二,基因家族注释文件​​​​​​​ 1.候选基因下载方式; 2.文件解读&a…

为什么老年人会经常性出现吃饭呛咳的情况 什么因素导致的

其实很多老年人在吃饭或是喝水的时候,都存在吞咽困难的问题,呛咳或者是忘了如何下咽。其实在老年人群体当中,这也是一种较为常见的现象,但是很多人都把这种现象当回事。 对于呛咳的现象是很好判断的,在家里老人喝水或是…

linux安装rabbitMq

一、安装Erlang 1、下载Erlang Erlang和RabbitMQ版本对照:RabbitMQ Erlang Version Requirements — RabbitMQ 下载地址:https://packagecloud.io/rabbitmq/erlang/packages/el/7 2、安装 Erlang 首先将下载好的文件上传到服务器,创建一…

Linux做代理服务器实现步骤

Linux做代理服务器 最简单的做法,用RedHat9.0为例 找一台能装上Linux的机器最少要有两块网卡 1.安装Linux,不管是在图形,还是文体下都可以,选择最小安装,在安装的时候可以先配置一下外网的IP和DNS(不设也行)&#xf…

GPT-3.5还没研究明白,GPT-4又来了,chatGPT会进化成什么样?

基于GPT-3.5的chatGPT热度才稍稍减退没多久,GPT-4又来了,文新一言的发布会也槽点满满,差距似乎越来越大了。 chatGPT到底厉害在哪?为什么突然就爆火了呢? 它的爆火,一方面,和它的出现形态有关…

LeetCode刷题集(二)(LeetCode 2037使每位学生都有座位的最少移动次数)

学习目标: 掌握LeetCode2037使每位学生都有座位的最少移动次数 题目内容: 一个房间里有 n 个座位和 n 名学生,房间用一个数轴表示。给你一个长度为 n 的数组 seats ,其中 seats[i] 是第 i 个座位的位置。同时给你一个长度为 n 的数…

在vue中如何使用nextTick ?nextTick 的原理是什么?

Vue.js 是一个流行的前端框架,它提供了一种响应式的数据绑定机制,使得页面的数据与页面的 UI 组件之间能够自动同步。Vue.js 中的数据驱动模型可以让开发者专注于业务逻辑,而不用过多地关注页面 DOM 操作的细节。然而,在某些情况下…

【hello Linux】进程概念(下)

目录 1. 通过系统调用创建进程—fork 1.1 通过fork创建进程: 1.2 如何不退出 vim 直接执行命令呢? 3. fork创建进程的本质 4. 父子进程的分流: 2. 进程状态 3. 信号 3.1 显示全部信号 3.1 停止进程 3.2 继续进程 3.3 杀死进程 后台进程 4. 僵…

为什么FTP会随着时间的过去而变慢?

有人问:我在XP上有FZ客户端3.5.3,在Vista上有0.9.41服务器。通过已经很慢的连接传输大文件时,我注意到速度开始时约为40kb / s,但逐渐趋于稳定,约为20kb / s,并保持这种状态。如果我退出客户端并重新启动它…

批处理脚本用法总结

目录 一、常用命令二、基本语法1. rem 和 ::2. echo 和 3. pause4. errorlevel5. title6. color7. goto 和 :8. find9. start10. assoc 和 ftype11. pushd 和 popd12. call13. if 三、常用特殊符号1. 2. %3. >4. >> 四、常见用法1. 设置临时环境变量2. 启动CMD执行命令…

systemctl 命令设置开机自启动失败

1.案例现象 我在 3 月 31日的时候发表了一篇《shell 脚本之一键部署安装 Nginx 》,介绍了如何通过 shell 脚本一键安装 Nginx 我脚本中执行了 Nginx 开机自启动的命令,当我使用 systemctl status nginx 命令复核的时候,我发现 Nginx 服务设…

redis学习

Redis 1.安装 vi /etc/sysconfig/network-scripts/ifcfg-ens33 #修改网络安装gcc依赖 yum install -y gcc tclcd redis-6.2.11 make && make installcp redis.conf.bck redis.conf #修改redis.conf bind 0.0.0.0 daemonize yes requirepass 123456cd /usr/local/src…

Attention注意力机制

加粗样式通俗理解:你会注意什么? 对于一个模型而言(CNN,LSTM),模型本身很难决定什么重要什么不重要,因此注意力机制诞生了。 注意力机制:我们会把焦点聚焦在比较重要的事务上 怎么…

一本通 3.4.6 拓扑排序

1352:【例4-13】奖金 【题目描述】 由于无敌的凡凡在2005年世界英俊帅气男总决选中胜出,Yali Company总经理Mr.Z心情好,决定给每位员工发奖金。公司决定以每个人本年在公司的贡献为标准来计算他们得到奖金的多少。 于是Mr.Z下令召开m方会谈…

Markdown 使用 Emoji 表情 MD格式小表情大全

文章目录 Markdown 使用 Emoji 表情 && MD格式小表情大全# 复制和粘贴表情符号# 使用表情符号简码MD格式小表情大全结语Markdown 使用 Emoji 表情 && MD格式小表情大全 有两种方法可以将表情符号添加到Markdown文件中:将表情符号复制并粘贴到Markdown格式的文…

1.4 Docker Swarm-详细介绍

Docker Swarm 是 Docker 官方推出的容器编排工具,用于管理 Docker 容器集群。Docker Swarm 的主要功能包括容器的部署、扩容、缩容、更新等。本文将详细介绍 Docker Swarm 的相关概念、架构、部署和使用方法。 一、Docker Swarm 概述 Docker Swarm 是 Docker 官方…

10、数据库学习规划:MySQL - 学习规划系列文章

MySQL数据库是笔者认识的几个流行的数据库之一。类似于Linux重装系统,其也是开源的,最主要是有很多的社区支持,众多的开发者对其能够进行使用,所以其功能也挺强大,便于使用。通过对MySQL数据库的学习,笔者认…

《计算机算法设计与分析》课后练习07

Author:龙箬 Computer Application Technology Change the World with Data and Artificial Intelligence ! CSDNweixin_43975035 我行及我道 //算法:用A(m)划分集合A(m:p-1) procedure PARTITION(m,p)integer m,p,i; global A(m:p-1)v A(m); i m //A(m)是划分元素…

FVM链的Themis Pro,5日ido超百万美元

交易一直是 DeFi 乃至web3领域最经久不衰的话题,也因此催生了众多优秀的去中心化协议,如 Uniswap 和 Curve。这些协议逐渐成为了整个系统的基石。 在永续合约方面,DYDX 的出现将 WEB2 时代的订单簿带回了web3。其链下交易的设计,仿…

VMware vSphere 8.0 Update 1 正式版发布 - 企业级工作负载平台

ESXi 8.0 U1 & vCenter Server 8.0 U1 请访问原文链接:https://sysin.org/blog/vmware-vsphere-8-u1/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org 2023-04-18,VMware vSphere 8.0 Update 1 正式…