找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 2042|回复: 0

【DBMS】死锁与活锁的区别

[复制链接]
发表于 2017-2-3 22:21:23 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
        DBMS为了实现并发控制,通常给各个事务所用到的资源加锁。但是加锁后会出现死锁与活锁两大问题。
        1.死锁问题:首先事务T1对A加了写锁,然后事务T2对B加了读锁。接着T1想对B进行写入因此请求对B加写锁。但是因为B身上拥有T1加好的读锁。根据三级封锁协议,已经加了读锁的数据只能再加读锁,而不能加写锁。于是T1等待T2释放读锁以供自己对B加上写锁。而此时T2申请读数据A。又根据三级封锁协议:被加了写锁的数据上不能被别的事务加其它任何锁,因此T2等待T1释放A的写锁。两事务互不相让发生死锁。举例:A国抱怨B国不承认历史,B国抱怨A国侵犯领土。AB两国互不相让冤冤相报,死锁产生。
        2.活锁问题:事务T1先对A加了读锁,然后事务T2等待请求对A加写锁,接着T3请求对A加读锁。根据三级封锁协议数据X被一个事务加了读锁以后,可以被其它事务再次加读锁。所以T3申请成功。接着T4请求对A加读锁,成功,T5请求对A加读锁,成功……T1的写锁一直处于等待状态,T1对A的加写锁请求一直得不到满足,事务T1假死。举例A申请补助金后B也想申请,但是因为某些原因B被迫排在晚来的C后面,不巧因为某种原因B又被D插队,被E插队……B成了受气包,积累了对DBMS的怨恨。
        总结:事务发生死锁和活锁问题严重影响了DBMS的正常工作。但是解决死锁问题的等待图法和解决两个问题并且为大多数DBMS所采用的超时法不在本帖讨论范畴,故不做讨论。
回复

使用道具 举报

本版积分规则

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-11-22 15:54 , Processed in 0.033076 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表