死锁的典型情况、产生的必要条件和解决方案

这篇具有很好参考价值的文章主要介绍了死锁的典型情况、产生的必要条件和解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

死锁:多个线程同时被阻塞,他们中的一个或全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止。

目录

前言

一、死锁的三种典型情况

(一)一个线程一把锁

(二)两个线程两把锁

(三)N个线程M把锁

二、死锁产生的必要条件(缺一不可)

(一)互斥使用

(二)不可抢占

(三)请求和保持

(四)循环等待

三、死锁的解决方案


一、死锁的三种典型情况

(一)一个线程一把锁

一个线程一把锁,但是都是不可重入锁。该线程争对这个锁连续加锁就会陷入死锁。如:

死锁的典型情况、产生的必要条件和解决方案,java,java,开发语言 

(二)两个线程两把锁

两个线程两把锁,把这两个线程先分别获取一把锁,然后再同时尝试获取对方的锁。

死锁的典型情况、产生的必要条件和解决方案,java,java,开发语言 

(三)N个线程M把锁

死锁的典型情况、产生的必要条件和解决方案,java,java,开发语言

 

二、死锁产生的必要条件(缺一不可)

(一)互斥使用

一个线程获取到一把锁之后,别的线程不能获取到这个锁。

(二)不可抢占

锁只能被持有者主动释放,而不能被其他线程直接抢走。

(三)请求和保持

一个线程去尝试获取更多的锁,在获取第二把锁的过程中,会对第一把锁始终保持获取状态。

(四)循环等待

t1 尝试获取 locker2,需要t2 执行完,释放 locker2;

t2 尝试获取 locker1,需要t1 执行完,释放 locker1.

三、死锁的解决方案

对于死锁产生的必要条件中,因为他们是缺一不可的,所以解决其中一个条件,死锁的问题就能被解决。解决死锁最关键的要点是第4点

如果对于获取锁有一个编号,并且规定加锁的顺序,那么死锁的问题就可以解决了。如:

我们规定locker1是第一步加锁,locker2是第二步加锁。那么在t1尝试获取locker2的时候,t2仍然处于申请尝试获取locker1的状态中,没有获取locker2,t1对于locker2的获取就会成功。文章来源地址https://www.toymoban.com/news/detail-669674.html

到了这里,关于死锁的典型情况、产生的必要条件和解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【100个 Unity实用技能】☀️ | 关于触发器互相检测的必要前提条件配置

    老规矩,先介绍一下 Unity 的科普小知识: Unity 是 实时3D互动内容创作和运营平台 。 包括 游戏开发 、 美术 、 建筑 、 汽车设计 、 影视 在内的所有创作者,借助 Unity 将创意变成现实。 Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和

    2023年04月09日
    浏览(72)
  • 车载音频EMI的产生及典型音频功放AW836XX的解决方案

    之前针对 eCall的文章中有提到D类音频功放需要关注EMI问题(点击文章回看《车载eCall系统音频应用解决方案》),在此展开此问题并寻求解决方案。   1. EMI定义与分类 电磁干扰(Electromagnetic Interference,EMI)是干扰电缆信号并降低信号完好性的电子噪音,EMI通常由电磁辐射发

    2024年01月20日
    浏览(50)
  • Java进阶(6)——抢购问题中的数据不安全(非原子性问题)& Java中的synchronize和ReentrantLock锁使用 & 死锁及其产生的条件

    1.大量请求拥挤抢购中的数据不安全问题; 2.事务ACID:原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(Durability); 3.线程安全特征:原子性(Atomicity)可见性(Visibility)有序性(Ordering); 4.java中的锁初步,synchronize锁和ReentrantLock锁使用初步; 5.滥用锁的问

    2024年02月11日
    浏览(39)
  • MySQL innoDB 间隙锁产生的死锁问题

    线上经常偶发死锁问题,当时处理一张表,也没有联表处理,但是有两个mq入口,并且消息体存在一样的情况,频率还不是很低,这么一个背景,我非常容易怀疑到,两个消息同时近到这一个事务里面导致的,但是是偶发的,又模拟不出来什么场景会导致死锁,只能进行代码

    2024年02月08日
    浏览(39)
  • 越细粒度的锁越好吗?产生死锁怎么办?

    大家好,我是哪吒。 上一篇提到了锁粒度的问题,使用“越细粒度的锁越好”,真的是这样吗?会不会产生一些其它问题?

    2024年02月08日
    浏览(42)
  • MySQL什么情况下会死锁,发生了死锁怎么处理呢?

    🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 🏆本文已收录于PHP专栏:MySQL的100个知识点。 🎉欢迎 👍点赞✍评论⭐收

    2024年02月08日
    浏览(35)
  • 什么条件下会出现死锁,如何避免?

    死锁,简单来说就是两个或者两个以上的线程在执行过程中,去争夺同一个共享资源导致相互等待的现象。如果没有外部干预,线程会一直处于阻塞状态,无法往下执行。这样一直等待处于阻塞状态的线程,被称为死锁线程。 产生死锁需要同时满足以下四个条件: 第一个:

    2024年02月12日
    浏览(55)
  • Mysql 死锁和死锁的解决方案

    前置知识:需要了解锁的种类,如表锁、行锁;行锁又分为记录锁、间隙锁、临键锁等等;什么情况下会加表锁,什么情况下会加行锁,什么情况下会加临键锁,什么情况锁会升级等等。。。网上讲解很多,这里就不单独讲述了 一 表死锁 产生原因: 用户A访问表A(锁住了表

    2024年02月02日
    浏览(58)
  • 【项目实战典型案例】23.部分服务总是频繁出现掉线情况

    因为某些特殊原因需要把nacos迁移到另一个版本的nacos(我迁的是nacos2.0.2版本.) 迁移完成后,Nacos注册中心有一个微服务有多台实例的时候,点击一个实例下线操作,报错 caused: errCode: 500, errMsg: do metadata operation failed ;caused:com.alibaba.nacos.consistency.exception.ConsistencyException:com.alibaba.

    2024年02月07日
    浏览(36)
  • Android进阶 View事件体系(三):典型的滑动冲突情况和解决策略

    本篇文章为总结View事件体系的第三篇文章,前两篇文章的在这里: Android进阶 View事件体系(一):概要介绍和实现View的滑动 Android进阶 View事件体系(二):从源码解析View的事件分发 本篇文章主要是介绍两种基本的滑动冲突情况和对应的解决策略,内容有: 基本的滑动冲突

    2024年02月10日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包