死锁-活锁与活锁的预防、死锁与死锁的预防和检测(处理死锁的方式:事务等待图)

一、引言

1、死锁是因采用封锁技术实现并发控制而产生的一种运行事务被阻塞或等待的现象

2、如果利用严格两阶段封锁协议来解决我们前面提到的“更新丢失”这种数据不一致问题,非串行调度中的事务T1首先获得数据对象X上的读锁并开始执行,随后事务T2也获得数据对象X上的读锁开始执行。当事务T1想对X写入新值时,则需将读锁升级为写锁,但其申请的数据对象X上的写锁与事务T2当前所持有的读锁不相容,事务T1申请的写锁得不到满足,事务T1需要等待,当事务T2想对数据对象X写入新值时,也需将读锁升级为写锁,但其申请的数据对象X上的写锁,也与事务T1当前所持有的读锁不相容,事务T2也不能获得数据对象X上的写锁,事务T2也需要等待,这就造成两个并发事务都不能继续执行,并相互等待对方释放锁,进入死锁状态

3、根据发生死锁时并发事务的等待状态的不同,可将死锁细分为“活死锁”,简称“活锁”和“死死锁”,简称“死锁”,处理死锁的方法包括预防和检测

二、活锁

活锁是指并发事务中有部分事务因封锁请求得不到满足长期处于等待的状态,但其他事务仍可以继续运行下去。处于长期等待状态的事务也称作被“饿死”

比如这里给出的4个并发事务的封锁情况,事务T1首先获得数据对象A上的读锁,事务T2在事务T1没有释放锁前,对数据对象A的写锁申请被拒绝,T2处于等待状态,但事务T3、事务T4对数据对象A的读锁申请可依次得到满足,能够继续执行,导致事务T1释放锁后事务T2仍然处于等待状态,等待其他事务释放锁,形成活锁

三、活锁的预防

避免发生活锁的简单方法是采用先来先服务的策略,当多个事务申请封锁同一数据对象时,按申请封锁的先后次序对这些事务排队,该数据对象上的锁一旦释放,申请队列的第一个事务首先获得锁

四、死锁

死死锁是指并发事务中的事务各自拥有某数据库对象上的“锁”,并去申请其他事务对某数据库对象所持有的“锁”,因申请得不到满足而产生的循环等待状态。

比如前面提到的利用严格两阶段封锁协议解决“更新丢失”问题中的事务T1、T2,分别等待对方释放锁,同时又都持有对方所申请的锁,两个事务将一直等待下去,谁也不能完成,形成死锁

利用两阶段进行并发控制,难免会造成并发事务相互间申请与另一个事务已获得的锁不相容的锁或多个事务在同一个数据对象上持有共享锁并都希望将锁升级的现象,从而导致出现死锁

五、死锁的预防和检测

1、因此,DBMS应能够对可能发生的死锁进行处理,处理死锁的方法大致分为两种

(1)一种是预防死锁,即对死锁加以预防,防止发生死锁。预防死锁发生的方法有

  • 一次封锁法。该方法要求每个事务必须获得要访问的所有数据对象上的锁后才能开始执行,而不是先占有部分锁
  • 顺序封锁法。该方法将数据对象按某种顺序排序,所有并发事务也按这个顺序申请数据对象上的锁,那么就不会由于相互等待所需要的锁而导致死锁

 (2)一种是检测并解除死锁即允许死锁发生,但要及时检测并进行解除。检测并解除死锁的方法有

  • 超时回滚法。即对事务的执行时间加以限制,如果某个事务的执行时间超过了这个限制,就认为其发生了死锁,将其回滚 。当一个事务因超时而回滚后,该事务将释放其持有的锁,其他事务则有可能申请到所需要的锁执行完成。比如,在一般事务的执行时间为几毫秒的数据库系统中,以1分钟为超时时限,则超时回滚的应是陷入死锁的事务,该方法实现简单,但仍有可能误判死锁,但超时时限设置得过长,则又不能及时发现死锁

2、DBMS常用的处理死锁的方法是事务等待图法,该方法不仅可预防死锁,也可对死锁进行检测

(1)事务等待图是一个由结点和边构成的有向图。G(T,U)

  • 图中的每个结点表示正在运行的事务
  • 图中的每条有向边表示一个事务在等待获取另一个事务释放其拥有的锁。

比如,在调度中,事务T2先读取数据对象A,可获得A上的读锁,然后事务T1要写数据对象A,则要申请A上的写锁,此时事务T1需要等待事务T2释放其已获取的读锁(r2(A),w1(A)),则在事务等待图中应存在结点T1和T2,并在结点T1和T2之间划一条从T1指向T2的有向边 

(2)用事务等待图可动态反应系统中并发事务申请等待数据对象上的锁的情况

(3)若事务等待图中存在环路,如图中存在由红色有向边构成的有向环路,则表示系统中存在并发事务的循环等待情况,发生了死锁

(4)系统需周期地,比如每隔1min检测事务等待图,当系统检测到事务等待图中存在环路后,将选择环路中一个撤销该事务所需代价最小的事务。比如图中的事务T3,将其回滚,被撤销的事务将不再申请锁,且释放其持有的所有锁原有环路中至少有一个事务,比如图中的事务T2可以执行不用再等待,该事务完成后又会释放其持有的锁,以此类推,原有环路中的其他事务也能陆续执行完成,解除死锁

(5)事务等待图可以用来在死锁形成后检测死锁,也可以用来预防死锁的形成。避免死锁的一种策略就是回滚所提请求将导致等待图中出现环路的任一事务 

3、举例:

下面来看在并发事务的该调度执行过程中事务等待图的变化情况

首先事务T1可获得数据对象A上的读锁,读取对象A,然后事务T3可获得数据对象B上的读锁,读取对象B,事务T1又可获得数据对象C上的写锁,写对象C,事务T3又可获得数据对象D上的写锁,写对象D,此时均没有冲突操作,没有事务等待情况

但当事务T2要读数据对象C时,因事务T1已获得数据对象C上的写锁,则事务T2只能等事务T1释放锁,则在事务等待图中,会产生结点T2到结点T1的一条边

当事务T1要写数据对象B时,因事务T3已获得数据对象B上的读锁,则事务T1也只能等事务T3释放锁,则在事务等待图中,会产生结点T1到结点T3的一条边

当事务T4要写数据对象D时,因事务T3已获得数据对象D上的写锁,则事务T4也只能等事务T3释放锁,则在事务等待图中,会产生结点T4到结点T3的一条边

当事务T3要写数据对象A时,因事务T1已获得数据对象A上的读锁,则事务T3也只能等事务T1释放锁,则在事务等待图中会产生结点T3到结点T1的一条边。此时,在事务等待图中出现了环路,即事务T1、事务T3相互等待,发生死锁

将所提请求将导致出现环路的事务T3回滚,释放其拥有的数据对象B和D上的锁,w1(B)和w4(D)操作可继续执行

将事务T1回滚,释放其拥有的数据对象A和C上的锁,r2(C)、w3(A)操作可继续执行

六、小结

1、并发事务因竞争不到所需的共享锁资源,无论是长期等待处于饿死的状态,还是相互等待处于死锁的状态,均要造成系统性能的降低

2、大多数DBMS通过判断事务等待图是否形成环路来避免或解除死锁

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/867528.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数值分析笔记(五)线性方程组解法

三角分解法 A的杜利特分解公式如下: u 1 j a 1 j ( j 1 , 2 , ⋯ , n ) , l i 1 a i 1 / u 11 ( i 2 , 3 , ⋯ , n ) , u k j a k j − ∑ m 1 k − 1 l b m u m j ⇒ a k j ( j k , k 1 , ⋯ , n ) , l i k ( a i k − ∑ m 1 k − 1 l i n u m k ) /…

uniapp 在手机上导出excel

1.创建excelDev.js文件 export default {exportExcel(fileData, documentName excel) {plus.io.requestFileSystem(plus.io.PUBLIC_DOCUMENTS, function(fs) {let rootObj fs.rootlet fullPath rootObj.fullPathconsole.log("开始导出数据")// 创建文件夹rootObj…

破解宇宙终极奥秘,战胜昊天无上束缚

在幽邃的暗夜下,细品着夫子与昊天跨越千年的智勇交锋,我的思绪不禁飘向了更加深远的宇宙边际,回响起那些关于人类如何挑战天命、战胜上天的过往。 宇宙奥秘 在浩瀚无垠的宇宙深渊中,隐藏着一段超越凡尘的规则。昊天,…

2025湖北武汉智慧教育装备信息化展/智慧校园展/湖北高博会

2025武汉教育装备展,2025武汉智慧教育展,2025武汉智慧校园展,2025武汉教育信息化展,2025武汉智慧教室展,湖北智慧校园展,湖北智慧教室展,武汉教学设备展,湖北高教会,湖北高博会 2025湖北武汉智慧教育装备信息化展/智慧校园展/湖北高博会 2025第10届武汉国际教育装备及智慧校园…

计算机网络——数据链路层(以太网扩展、虚拟局域网、高速以太网)

在许多情况下,我们希望把以太网的覆盖范围扩展。本节先讨论在物理层把以太网扩展,然后讨论在数据链路层把以太网扩展。这种扩展的以太网在网络层看来仍然是一个网络。 在物理层扩展以太网 现在,扩展主机和集线器之间的距离的一种简单方法就是…

jmeter-beanshell学习3-beanshell获取请求报文和响应报文

前后两个报文,后面报文要用前面报文的响应结果,这个简单,正则表达式或者json提取器,都能实现。但是如果后面报文要用前面请求报文的内容,感觉有点难。最早时候把随机数写在自定义变量,前后两个接口都用这个…

小暑节气,选对劳保鞋,让安全与清凉同行

在七月炽热的阳光下,我们迎来了二十四节气中的小暑,标志着盛夏时节的正式开始。随着气温的节节攀升,不仅大自然万物进入了生长的旺季,我们的工作与日常生活也面临着新的挑战——如何在高温环境下保障自身安全,成为了不…

实例演示kafka stream消息流式处理流程及原理

以下结合案例&#xff1a;统计消息中单词出现次数&#xff0c;来测试并说明kafka消息流式处理的执行流程 Maven依赖 <dependencies><dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-streams</artifactId><exclusio…

vue3【实战】来回拖拽放置图片

效果预览 技术要点 img 标签默认就是可拖拽的&#xff08;a 标签也是&#xff09;事件 e 内的 dataTransfer 对象可用于临时存储事件过程中的数据拖拽事件的默认行为是用浏览器新开页签打开被拖拽对象&#xff0c;所以通常需要禁用默认的浏览器行为被拖拽元素必须设置 id&#…

【pyqt-实训训练】串口助手

串口助手 前言一、ui设计二、ui的控件命名三、ui转py使用类的方法【扩展】使用ui文件导入&#xff01;P7的小错误解决办法 总结 前言 我的惯例就是万物之始&#xff0c;拜见吾师&#x1f970;⇨pyqt串口合集 最开始的时候我想的是&#xff0c;学了那么久的pyqt&#xff0c;我…

ASCII码对照表(Matplotlib颜色对照表)

文章目录 1、简介1.1 颜色代码 2、Matplotlib库简介2.1 简介2.2 安装2.3 后端2.4 入门例子 3、Matplotlib库颜色3.1 概述3.2 颜色图的分类3.3 颜色格式表示3.4 内置颜色映射3.5 xkcd 颜色映射3.6 颜色命名表 4、Colorcet库5、颜色对照表结语 1、简介 1.1 颜色代码 颜色代码是…

线程同步66666

1. 概述 当有多个线程访问同一个共享资源&#xff08;临界资源&#xff09;时&#xff0c;且不允许同时访问&#xff0c;那么就需要线程同步。常见的线程同步方式&#xff1a;互斥锁、读写锁、条件变量、信号量。 2. 互斥锁 互斥锁的方式可以简单概括为&#xff1a;锁定操作…

【MYSQL】InnoDB引擎为什么选可重复读作为默认隔离级别

InnoDB引擎为什么选可重复读作为默认隔离级别 一般的DBMS系统&#xff0c;默认都会使用读提交&#xff08;Read-Comitted&#xff0c;RC&#xff09;作为默认隔离级别&#xff0c;如Oracle、SQL Server等&#xff0c;而MySQL却使用可重复读&#xff08;Read-Repeatable&#x…

alphazero学习

AlphaGoZero是AlphaGo算法的升级版本。不需要像训练AlphaGo那样&#xff0c;不需要用人类棋局这些先验知识训练&#xff0c;用MCTS自我博弈产生实时动态产生训练样本。用MCTS来创建训练集&#xff0c;然后训练nnet建模的策略网络和价值网络。就是用MCTSPlayer产生的数据来训练和…

【JVM 的内存模型】

1. JVM内存模型 下图为JVM内存结构模型&#xff1a; 两种执行方式&#xff1a; 解释执行&#xff1a;JVM是由C语言编写的&#xff0c;其中有C解释器&#xff0c;负责先将Java语言解释翻译为C语言。缺点是经过一次JVM翻译&#xff0c;速度慢一点。JIT执行&#xff1a;JIT编译器…

ubuntu设置开启自动挂载sftp

1. 前言 与其说 ubuntu 开启自动挂载 sftp, 更确切的说应该是 nautilus (ubuntu上默认的文件管理器) 开机自动挂载 sftp。 因为 这里即使选择永远记住&#xff0c;开机也不会自动挂载 sftp 2.设置方法 gnome-session-properties #开机只启动设置命令设置 gio mount sftp…

经典双运算放大器LM358

前言 LM358双运放有几十年的历史了吧&#xff1f;通用运放&#xff0c;很常用&#xff0c;搞电路的避免不了接触运放&#xff0c;怎么选择运放&#xff0c;是工程师关心的问题吧&#xff1f; 从本文开始&#xff0c;将陆续发一些常用的运放&#xff0c;大家选型可以参考&#…

浪潮信息携手算力企业为华东产业集群布局提供高质量算力支撑

随着信息技术的飞速发展&#xff0c;算力已成为推动数字经济发展的核心力量。近日&#xff0c;浪潮信息与五家领先的算力运营公司在南京正式签署战略合作协议&#xff0c;共同加速华东地区智算基础设施布局&#xff0c;为区域经济发展注入新动力。 进击的算力 江苏持续加码智算…

springboot三层架构详细讲解

目录 springBoot三层架构0.简介1.各层架构1.1 Controller层1.2 Service层1.3 ServiceImpl1.4 Mapper1.5 Entity1.6 Mapper.xml 2.各层之间的联系2.1 Controller 与 Service2.2 Service 与 ServiceImpl2.3 Service 与 Mapper2.4 Mapper 与 Mapper.xml2.5 Service 与 Entity2.6 C…

Exploting an API endpoiint using documentation

HTTP request methods https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods 第一步:burp抓包刷新页面 httphistory中只能看到两个记录,可以看下Response,是HTML页面,说明这里有HTML页面 ,但是没有发现特定的API接口。 第二步:用户登录 转到用户登录的功能点处…