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

什么是可重入,什么是可重入锁?它用来解决什么问题?

可重入是多线程并发编程里面一个比较重要的概念,

简单来说,就是在运行的某个函数或者代码,因为抢占资源或者中断等原因导致函数或者代码的运行中断,

等待中断程序执行结束后,重新进入到这个函数或者代码中运行,并且运行结果不会受到影响,那么这 个函数或者代码就是可重入的。

(如图) 而可重入锁,简单来说就是一个线程如果抢占到了互斥锁资源,在锁释放之前再去竞争同一 把锁的时候,不需要等待,只需要记录重入次数。

在多线程并发编程里面,绝大部分锁都是可重入的,比如 Synchronized、ReentrantLock 等,但是也 有不支持重入的锁,比如 JDK8 里面提供的读写锁 StampedLock。

锁的可重入性,主要解决的问题是避免线程死锁的问题。

因为一个已经获得同步锁 X 的线程,在释放锁 X 之前再去竞争锁 X 的时候,相当于会出现自己要等待

自己释放锁,这很显然是无法成立的。

以上就是我对这个问题的理解。


http://www.kler.cn/a/561486.html

相关文章:

  • 使用DeepSeek/ChatGPT等AI工具辅助编写wireshark过滤器
  • 网卡驱动架构以及源码分析
  • 2011-2019年各省15岁及以上文盲人口数数据
  • 【redis】数据类型之Bitfields
  • conda、anaconda、pip、pytorch、tensorflow有什么区别?
  • MATLAB学习之旅:图像处理与计算机视觉应用
  • django filter 不等于
  • 大厂数据仓库数仓建模面试题及参考答案
  • vue2项目打包后js文件过大, 首次加载缓慢
  • AI工具生成答案格式整理与保证生成文献真实性办法
  • 星环科技推出DeepSeek全场景解决方案:即开即用、企业级部署、端侧智能三位一体
  • django校园互助平台~源码
  • java热点面试题
  • Java面试题全集(上)
  • 【docker】docker pull拉取中不断重复下载问题,解决方案之一,磁盘空间扩容
  • 《Effective Objective-C》阅读笔记(中)
  • 山东大学软件学院nosql实验一环境配置
  • Mybatis的一级、二级缓存
  • 本地部署deepseek大模型后使用c# winform调用(可离线)
  • 图数据库Neo4j面试内容整理-使用场景-社交网络