首页 > 其他分享 >死锁

死锁

时间:2024-02-29 13:27:16浏览次数:20  
标签:环路 化简 死锁 进程 资源 资源分配

死锁的必要条件

  1. 资源互斥。
  2. 占有且等待:进程占有的资源在任务完成前不会主动释放。
  3. 不可抢占:进程不会强制抢占其他进程的资源。
  4. 循环等待。

死锁避免

在分配资源前看是否满足全部条件,不满足则不分配。(银行家算法。)

检测死锁

画出资源分配图,检测是否存在环路。检测环路前要将资源分配图化简,化简的原理是“满足所有资源的进程,迟早能够执行完成释放资源”。因此,可以其资源回收,使之成为孤立结点,然后将所回收的资源分配给其它进程。循环此过程,直到无法化简。若仍存在环路,则该系统目前处于死锁状态。

检测到死锁后,需要解除死锁。

解除死锁

破坏除了“互斥条件”之外的其他三个条件:

  • 回退执行:系统定期对各个进程进行检查,将检查点的有关信息写入文件。死锁时,让某占有必要资源的进程回退到取得资源之前的一个检查点,释放的资源分配给一个死锁进程(破坏“占有且等待”
  • 抢占资源:剥夺占有进程的资源,分配给另外某些进程,直至死锁环路被打破(破坏“不可抢占”
  • 杀掉进程:一次终止一个进程,直至消除死锁环路(破坏“循环等待”

标签:环路,化简,死锁,进程,资源,资源分配
From: https://www.cnblogs.com/hellozhangjz/p/18043450

相关文章

  • 【MySQL】【锁的前置知识】数据库的锁有哪些?怎么看?锁的是什么?什么情况下会加什么锁?什
    1 前言数据库中的锁,是一个很大的问题,从哪看起呢?该怎么看呢?所以在看锁之前,了解一些相关的前置知识,然后再去细看不同的场景下会加什么样的锁方便你快速理解。官网,当然我们这里看的引擎是InnoDB哈,那我们从以下几个问题看起:(1)数据库中的锁有哪些(怎么知道呢,网上的文章五花八门的......
  • sqlserver 数据库事务ACID和使用 数据库锁,悲观锁乐观锁死锁
    在SQLServer中,事务的ACID属性、数据库锁、悲观锁、乐观锁和死锁是数据库管理和设计中的重要概念。以下是对这些概念的详细解释以及如何在SQLServer中使用它们:1.ACID属性在SQLServer中,事务必须满足ACID属性,以确保数据的一致性和可靠性。原子性(Atomicity):......
  • C#和sqlserver 如何实现 事务ACID和使用 数据库锁,悲观锁乐观锁死锁
    在C#中使用SQLServer实现事务的ACID(原子性、一致性、隔离性、持久性)属性和使用数据库锁(悲观锁和乐观锁)时,你可以通过ADO.NET的SqlConnection和SqlTransaction类来实现。下面是一些示例和概念说明。实现ACID事务ACID属性是事务处理的四个基本特征,它们确保事务在数据库中的正确......
  • 两个死锁案例分析
    背景 死锁发生后,可以直接执行showengineinnodbstatus;查看最近的死锁日志。案例一:索引唯一键冲突导致的死锁,解决办法,在进行事务操作前先对数据进行一个排序,降低互相锁冲突的概率。 =====================================2024-02-1815:36:000x7f2146991700INNODB......
  • 一例MySQL的insert死锁
    原文链接:https://fanyilun.me/2022/03/09/%E4%B8%80%E4%BE%8BMySQL%E7%9A%84insert%E6%AD%BB%E9%94%81/ 分享一个最近遇到的一例MySQL死锁。关于MySQL的锁,几年前写过一篇原理类的文章,基础知识建议移步MySQL加锁分析。背景  我们使用MySQL实现了一个通用的分布式DB锁,建表语句......
  • MySQL死锁日志
    MySQL死锁日志MySQL的死锁可以通过showengineinnodbstatus\G;来查看,最近的死锁信息在LATESTDETECTEDDEADLOCK下面。但是这种方式只能显示最新的一条死锁信息,该方式无法完全捕获到系统发生的死锁信息。MySQL系统内部提供一个innodb_print_all_deadlocks参数,该参数默......
  • MySQL死锁日志的查看和分析
    MySQL死锁日志的查看和分析 目录一,关于MySQL的死锁二,人造一个死锁的场景三,查看最近一次死锁的日志四,死锁日志的内容1,事务1信息2,事务1持有的锁3,事务1正在等待的锁4,事务2信息5,事务2正在持有的锁6,事务2正在等待的锁7,死锁处理结果五,关于mysql的八种锁1,行锁(RecordL......
  • golang 死锁 all goroutines are asleep - deadlock!
    channel死锁packagemainimport"fmt"funcmain(){ch:=make(chanstring)fori:=0;i<10;i++{s:=<-chfmt.Println(s)}gofunc(chchanstring){fori:=0;i<10;i++{......
  • 共享内存 ---进程间通讯 解决死锁和数据损坏的问题 同时可以解决数据不同步的问题
    usingSystem;usingSystem.IO.MemoryMappedFiles;usingSystem.Text;usingSystem.Threading;classWriteProcess{staticvoidMain(){using(MemoryMappedFilemmf=MemoryMappedFile.CreateOrOpen("my_shared_memory",1024)){......
  • 死锁和递归锁
    死锁(1)介绍死锁是指两个或多个进程,在执行过程中,因争夺资源而造成了互相等待的一种现象。即两个或多个进程持有各自的锁并试图获取对方持有的锁,从而导致被阻塞,不能向前执行,最终形成僵局。在这种情况下,系统资源利用率极低,系统处于一种死循环状态。fromthreadingimportThrea......