作业——并发控制
Posted Fmm-PMO
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了作业——并发控制相关的知识,希望对你有一定的参考价值。
最后一章结束了,为期13周的数据库课程也结束了,这也意味着快该好好复习准备考试,然后回家啦!
本章作业是课后习题第9、10、14题,部分答案有参考,正好学习一下答题规范。还是老模式,先复习一下这一章的重点之重点。
一、基本封锁类型
排它锁:简记为X锁,又称为写锁。
若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁
保证其他事务在T释放A上的锁之前不能再读取和修改A
共享锁:简记为S锁,又称为读锁。
若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其它事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁
保证其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改
锁的相容矩阵
二、三级封锁协议
- 一级封锁协议
事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。
正常结束(COMMIT)
非正常结束(ROLLBACK)
一级封锁协议可防止丢失修改 - 二级封锁协议
一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁。
二级封锁协议可以防止丢失修改和读“脏”数据。 - 三级封锁协议
一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。
三级封锁协议可防止丢失修改、读脏数据和不可重复读。
三级协议的主要区别
三、活锁和死锁
活锁:
事务T1封锁了数据R。
事务T2又请求封锁R,于是T2等待。
T3也请求封锁R,当T1释放了R上的封锁之后系统首先批准了T3的请求,T2仍然等待。
T4又请求封锁R,当T3释放了R上的封锁之后系统又批准了T4的请求……
T2有可能永远等待
死锁:
两个或多个事务都已封锁了一些数据对象,然后又都请求对已为其他事务封锁的数据对象加锁,从而出现死等待。
四、可串行化调度与冲突可串行化调度
可串行化调度:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果相同
冲突可串行化调度:一个调度Sc在保证冲突操作的次序不变的情况下,通过交换两个事务不冲突操作的次序得到另一个调度Sc’,如果Sc’是串行的,称调度Sc是冲突可串行化的调度
若一个调度是冲突可串行化,则一定是可串行化的调度。可用这种方法判断一个调度是否是冲突可串行化的。冲突可串行化调度是可串行化调度的充分条件,不是必要条件。还有不满足冲突可串行化条件的可串行化调度。
五、两段锁协议
指所有事务必须分两个阶段对数据项加锁和解锁
含义:事务分为两个阶段
第一阶段是获得封锁,也称为扩展阶段
事务可以申请获得任何数据项上的任何类型的锁,但是不能释放任何锁
第二阶段是释放封锁,也称为收缩阶段
事务可以释放任何数据项上的任何类型的锁,但是不能再申请任何锁
六、课后作业
以上是关于作业——并发控制的主要内容,如果未能解决你的问题,请参考以下文章