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

【多线程面试题二十二】、 说说你对读写锁的了解

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。

面试官:说说你对读写锁的了解

参考答案:

与传统锁不同的是读写锁的规则是可以共享读,但只能一个写,总结起来为:读读不互斥、读写互斥、写写互斥,而一般的独占锁是:读读互斥、读写互斥、写写互斥,而场景中往往读远远大于写,读写锁就是为了这种优化而创建出来的一种机制。 注意是读远远大于写,一般情况下独占锁的效率低来源于高并发下对临界区的激烈竞争导致线程上下文切换。因此当并发不是很高的情况下,读写锁由于需要额外维护读锁的状态,可能还不如独占锁的效率高。因此需要根据实际情况选择使用。

在Java中ReadWriteLock的主要实现为ReentrantReadWriteLock,其提供了以下特性:

  • 1、公平性选择:支持公平与非公平(默认)的锁获取方式,吞吐量非公平优先于公平。

  • 2、可重入:读线程获取读锁之后可以再次获取读锁,写线程获取写锁之后可以再次获取写锁。

  • 3、可降级:写线程获取写锁之后,其还可以再次获取读锁,然后释放掉写锁,那么此时该线程是读锁状态,也就是降级操作。

http://www.lryc.cn/news/216398.html

相关文章:

  • Panda3d 相机控制
  • Linux(CentOS)安装MySQL教程
  • 使用 OpenSSL 工具撰写 Bash 脚本进行密码明文的加密与解密
  • uniapp之actionsheet 自定义组件
  • 在nodejs中使用Mongoose和MongoDB实现curd操作
  • 10.28 校招 实习 内推 面经
  • Azure 机器学习 - 使用无代码 AutoML 训练分类模型
  • 【调试技术】用户态查看PEB和TEB
  • 如何搭建一个Spring MVC和Vue3的应用程序
  • CSS3设计动画样式
  • AtCoder abc 144
  • 【开题报告】基于SpringBoot的医美在线预约系统的设计与实现
  • AutoGen agent使用;调用本地LLM
  • Docker安装matomo
  • 副对角线以上和以下都为0的行列式求解
  • DSP开发例程(4): logbuf_print_to_uart
  • 计算机毕业设计选题推荐-超市售货微信小程序/安卓APP-项目实战
  • Azure 机器学习 - 使用 Visual Studio Code训练图像分类 TensorFlow 模型
  • Vue 创建自定义 ref 函数
  • [2016-2018]phpstudy的exp制作
  • 服务器数据恢复—Zfs文件系统下文件被误删除的如何恢复数据?
  • 关于嵌入式rtthread系统与单片机芯片
  • 在Ubuntu上安装Redis并学习使用get、set和keys命令
  • Ubuntu更换镜像源
  • Sulfo-CY5 NHS荧光染料的生物应用2230212-27-6星戈瑞
  • Python Django 之模板继承详解(extends)
  • 混合式ANC主动降噪耳机系统设计(含C源代码)
  • Linux查看磁盘、内存、cpu信息
  • C语言 强制类型转换的各种代码示例
  • python 二维码使用