首页 > 其他分享 >公平锁和非公平锁

公平锁和非公平锁

时间:2023-12-13 19:57:30浏览次数:25  
标签:公平性 排队 线程 公平 多线程 CPU

在⼤多数情况下,锁的申请都是⾮公平的,也就是说,线程1⾸先请求锁A,接着线程2也请求了锁A。那么当锁A可⽤时,是线程1可获得锁还是线程2可获得锁呢?这是不⼀定的,系统只是会从这个锁的等待队列中随机挑选⼀个,因此不能保证其公平性。这就好⽐买票不排队,⼤家都围在售票窗⼝前,售票员忙的焦头烂额,也顾及不上谁先谁后,随便找个⼈出票就完事了,最终导致的结果是,有些⼈可能⼀直买不到票。⽽公平锁,则不是这样,它会按照到达的先后顺序获得资源。公平锁的⼀⼤特点是:它不会产⽣饥饿现象,只要你排队,最终还是可以等到资源的;synchronized关键字默认是有jvm内部实现控制的,是⾮公平锁。⽽ReentrantLock运⾏开发者⾃⼰设置锁的公平性。

1、为什么会有公平锁/⾮公平锁的设计为什么默认⾮公平?

  1. 恢复挂起的线程到真正锁的获取还是有时间差的,从开发⼈员来看这个时间微乎其微,但是从CPU的⻆度来看,这个时间差存在的还是很明显的。所以⾮公平锁能更充分的利⽤CPU 的时间⽚,尽量减少 CPU 空闲状态时间。
  1. 使⽤多线程很重要的考量点是线程切换的开销,当采⽤⾮公平锁时,当1个线程请求锁获取同步状态,然后释放同步状态,因为不需要考虑是否还有前驱节点,所以刚释放锁的线程在此刻再次获取同步状态的概率就变得⾮常⼤,所以就减少了线程的开销。

2、使⽤公平锁会有什么问题

公平锁保证了排队的公平性,⾮公平锁霸⽓的忽视这个规则,所以就有可能导致排队的⻓时间在排队,也没有机会获取到锁,这就是传说中的 “锁饥饿”

3、什么时候⽤公平?什么时候⽤⾮公平?

如果为了更⾼的吞吐量,很显然⾮公平锁是⽐较合适的,因为节省很多线程切换时间,吞吐量⾃然就上去了;否则那就⽤公平锁,⼤家公平使⽤。

标签:公平性,排队,线程,公平,多线程,CPU
From: https://www.cnblogs.com/lin513/p/17899794.html

相关文章

  • 多开工具对游戏平衡性与公平性的影响评估
    多开工具对游戏平衡性与公平性的影响评估摘要:随着网络游戏的普及,一些玩家开始使用多开工具来同时运行多个游戏账号。然而,这种行为引发了一系列讨论,涉及到游戏的平衡性和公平性问题。本文将评估多开工具对游戏平衡性与公平性的影响,并提出相应的观点。引言:多开工具是一种允许玩......
  • Redission实现公平锁为什么要使用ZSet数据结构?
    Redission实现公平锁为什么要使用ZSet数据结构?使用ZSet结构有什么好处?看lua代码好像也并没有使用到ZSet的二分查找这种优势,在Redisson中实现公平锁时使用ZSet(有序集合)数据结构有以下几个好处:具有排序功能:ZSet是有序的数据结构,其中的每个元素都有一个分数(score)与之相关联。这使得R......
  • ReentrantLock怎么实现公平锁的?
    newReentrantLock()构造函数默认创建的是非公平锁NonfairSyncpublicReentrantLock(){ sync=newNonfairSync();}同时也可以在创建锁构造函数中传入具体参数创建公平锁FairSyncReentrantLocklock=newReentrantLock(true);---ReentrantLock//true代表公平锁,fa......
  • 微信里写周报添加到公司办公平台的方法
    概要微信和公司用的办公平台互通,我们已经说过几篇。这次将给大家介绍,如何在微信里写周报内容,添加到公司办公平台的周报应用里。工作中,如果出差在外,或者回到家想要汇报一周的工作情况的时候,不用下载额外的app,只需要通过常用的微信就可以向办公系统里添加记录,是不是很酷?由于正式......
  • 公平的糖果交换
    爱丽丝和鲍勃拥有不同总数量的糖果。给你两个数组 aliceSizes 和 bobSizes ,aliceSizes[i] 是爱丽丝拥有的第 i 盒糖果中的糖果数量,bobSizes[j] 是鲍勃拥有的第 j 盒糖果中的糖果数量。两人想要互相交换一盒糖果,这样在交换之后,他们就可以拥有相同总数量的糖果。一个人拥......
  • WorkPlus | 好用、专业、安全的局域网即时通讯及协同办公平台
    自国家于2022年发布的《关于加强数字政府建设的指导意见》以来,我国数字政府建设已经迈入了一个全新的里程碑,迎来了全面改革和深化升级的全新阶段。WorkPlus作为自主可控、可信安全、专属定制的数字化平台,扮演着政务机关、政府单位以及各行各业的“数字化底座”角色,为他们提供了信息......
  • leet code 888.公平的糖果交换
    888.公平糖果交换题目解析题目中给定了两个数组,而并没有明确给定数组是否已经排序,所以需要先对目标数组进行排序然后需要计算两个数组的差值,从而确定哪一方交换出更多的糖果,即爱丽丝或鲍勃那一方付出更多的糖果假设其中一方需要付出较多的糖果数量记为另一方需要付出较少的糖......
  • WorkPlus——高效私有化办公平台,实现即时协作与信息安全的完美结合
    在当今数字化时代,办公效率已成为企业追求发展的重要标准之一。为了满足企业对内部信息流畅传递的需求,私有化部署的即时通讯软件成为了不可忽视的核心工具。WorkPlus作为一款功能强大的办公平台,为企业打造了一个支持局域网的自主控制办公环境,提供了即时通讯、文件共享、视频会议等丰......
  • ​【漏洞复现】万户协同办公平台 ezoffice未授权漏洞
    万户协同办公平台ezoffice简介万户ezOFFICE集团版协同平台以工作流程、知识管理、沟通交流和辅助办公四大核心应用漏洞描述万户ezOFFICE协同管理平台是一个综合信息基础应用平台。万户ezoffice协同管理平台存在未授权访问漏洞,攻击者可以从evoInterfaceServlet接口获得系统登......
  • AQS公平锁的流程
    reentrantd的lock执行的是aqs的acquire方法1tryAcquirecas设置state的状态从0设置为1,成功则获取到锁,不成功则进行下一步 2、addWaiter 没有或取到锁,构建一个node,因为第一次队列没有元素,头部和尾部节点为空,走enq方法会将head和tail都指向一个newNode(),然后将tail指向等待......