二级封锁协议能否避免死锁.docx
《二级封锁协议能否避免死锁.docx》由会员分享,可在线阅读,更多相关《二级封锁协议能否避免死锁.docx(7页珍藏版)》请在冰豆网上搜索。
二级封锁协议能否避免死锁
竭诚为您提供优质文档/双击可除
二级封锁协议能否避免死锁
篇一:
数据库中的封锁协议
并发产生的数据不一致有:
丢失修改,读脏数据,不可重复读
两种锁:
s锁(共享锁,读锁),x锁(排它锁,写锁)
加s锁后,本事务就只能读取数据而不能修改。
其他事务可以加s锁来读取数据,但不能加x锁修改数据。
即:
只要数据上有s锁,任何事务都只能再对其加s锁读取,而不能加x锁修改。
加x锁后,本事务可以读取和修改数据。
其他事务不能加任何锁,从而也不能读取和修改数据。
封锁协议有:
三级封锁协议以及两段锁协议
一级封锁协议:
写数据前加x锁,事务结束释放x锁。
解决丢失修改问题。
二级封锁协议:
一级之上,读数据前加s锁,读完释放s锁。
一级之上解决读脏数据问题。
三级封锁协议:
二级之上,事务结束才释放s锁。
二级之上解决不可重复读问题。
两段锁协议(2pl):
读数据前加s锁,写数据前加x锁,事务结束时才释放。
当要修改数据时,事务应对已加的s锁升级为x锁。
事务释放一个封锁后,不再申请其它任何封锁。
即一个事务如果对不同数据加锁,解锁都是放到后面一块儿进行的。
注意,以前一直弄错,这儿是一个事务,如果是并发事务,a事务的解锁可以放到b事务之前。
两段锁协议解决的是事务并发时的正确调度,并不能解决死锁。
注意:
如果两个事务都对同一数据有读和写,那么可以不加s锁,直接上x锁。
篇二:
并发控制课后答案
第八章并发控制
习题解答和解析
1.1.在数据库中为什么要并发控制
答:
数据库是共享资源,通常有许多个事务同时在运行。
当多个事务并发地存取数据库时就会产生同时读取和/或修改同一数据的情况。
若对并发操作不加控制就可能会存取和存储不正确的数据,破坏数据库的一致性。
所以数据库管理系统必须提供并发控制机制。
2.2.并发操作可能会产生哪几类数据不一致用什么方法能避免各种不一致的情况答:
并发操作带来的数据不一致性包括三类:
丢失修改、不可重复读和读"脏"数据。
(1)丢失修改(lostupdate)两个事务t1和t2读入同一数据并修改,t2提交的结果破坏了(覆盖了)t1提交的结果,导致t1的修改被丢失。
(2)不可重复读(non-RepeatableRead)不可重复读是指事务t1读取数据后,事务t2执行更新操作,使t1无法再现前一次读取结果。
不可重复读包括三种情况:
详见《概论》
8.1(p266)。
(3)读"脏"数据(dirtyRead)读"脏"数据是指事务t1修改某一数据,并将其写回磁盘,事务t2读取同一数据后,t1由于某种原因被撤销,这时t1已修改过的数据恢复原值,t2读到的数据就与数据库中的数据不一致,则t2读到的数据就为"脏"数据,即不正确的数据。
避免不一致性的方法和技术就是并发控制。
最常用的技术是封锁技术。
也可以用其他技术,例如在分布式数据库系统中可以采用时间戳方法来进行并发控制。
3.3.什么是封锁
答:
封锁就是事务t在对某个数据对象例如表、记录等操作之前,先向系统发出请求,对其加锁。
加锁后事务t就对该数据对象有了一定的控制,在事务t释放它的锁之前,其他的事务不能更新此数据对象。
封锁是实现并发控制的一个非常重要的技术。
4.4.基本的封锁类型有几种试述它们的含义。
答:
基本的封锁类型有两种:
排它锁(exclusivelocks,简称x锁)和共享锁(sharelocks,简称s锁)。
排它锁又称为写锁。
若事务t对数据对象a加上x锁,则只允许t读取和修改a,其他任何事务都不能再对a加任何类型的锁,直到t释放a上的锁。
这就保证了其他事务在t释放a上的锁之前不能再读取和修改a。
共享锁又称为读锁。
若事务t对数据对象a加上s锁,则事务t可以读a但不能修改a,其他事务只能再对a加s锁,而不能加x锁,直到t释放a上的s锁。
这就保证了其他事务可以读a,但在t释放a上的s锁之前不能对a做任何修改。
5.如何用封锁机制保证数据的一致性
答:
dbms在对数据进行读、写操作之前首先对该数据执行封锁操作,例如下图中事务t1在对a进行修改之前先对a执行xlock(a),即对a加x锁。
这样,当t2请求对a加x锁时就被拒绝,t2只能等待t1释放a上的锁后才能获得对a的x锁,这时它读到的a是t1更新后
的值,再按此新的a值进行运算。
这样就不会丢失
t1的更新。
dbms按照一定的封锁协议,对并发操作进行控制,使得多个并发操作有序地执行,就可以避免丢失修改、不可重复读和读"脏"数据等数据不一致性。
6.什么是封锁协议不同级别的封锁协议的主要区别是什么
答:
在运用封锁技术对数据加锁时,要约定一些规则。
例如,在运用x锁和s锁对数据对象加锁时,要约定何时申请x锁或s锁、何时释放封锁等。
这些约定或者规则称为封锁协议(lockingprotocol)。
对封锁方式约定不同的规则,就形成了各种不同的封锁协议、不同级别的封锁协议,例如《概论》8.3中介绍的三级封锁协议,三级协议的主要区别在于什么操作需要申请封锁,何时申请封锁以及何时释放锁(即持锁时间的长短)。
一级封锁协议:
事务t在修改数据R之前必须先对其加x锁,直到事务结束才释放。
二级封锁协议:
一级封锁协议加上事务t在读取数据R之前必须先对其加s锁,读完后即可释放s锁。
三级封锁协议:
一级封锁协议加上事务t在读取数据R之前必须先对其加s锁,直到事务结束才释放。
7.不同封锁协议与系统一致性级别的关系是什么
答:
不同的封锁协议对应不同的一致性级别。
一级封锁协议可防止丢失修改,并保证事务t是可恢复的。
在一级封锁协议中,对读数据是不加s锁的,所以它不能保证可重复读和不读"脏"数据。
二级封锁协议除防止了丢失修改,还可进一步防止读"脏"数据。
在二级封锁协议中,由于读完数据后立即释放s锁,所以它不能保证可重复读。
在三级封锁协议中,无论是读数据还是写数据都加长锁,即都要到事务结束才释放封锁。
所以三级封锁协议除防止了丢失修改和不读"脏"数据外,还进一步防止了不可重复读。
下面的表格清楚地说明了封锁协议与系统一致性的关系。
8.什么是活锁什么是死锁
答:
等待unlock等待.等待等待
.等待等待
.等待等待
.等待.等待
如果事务t1封锁了数据R,事务t2飞又请求封锁R,于是t2等待。
t3也请求封锁R,当t1释放了R上的封锁之后系统首先批准了t3的请求,t2仍然等待。
然后t4又请求封锁R,当t3释放了R上的封锁之后系统又批准了t4的请求……t2有可能永远等待,这就是活锁的情形。
活锁的含义是该等待事务等待时间太长,似乎被锁住了,实际上可能被激活。
如果事务tl封锁了数据R1,t2封锁了数据R2,然后t1又请求封锁R2,因t2已封锁了R2,于是t1等待t2释放R2上的锁。
接着t2又申请封锁R1,因t1已封锁了R1,t2也只能等待t1释放Rl上的锁。
这样就出现了t1在等待t2,而t2又在等待tl的局面,t1和t2两个事务永远不能结束,形成死锁。
等待等待等待等待
9.试述活锁的产生原因和解决方法。
答:
活锁产生的原因:
当一系列封锁不能按照其先后顺序执行时,就可能导致一些事务无限期等待某个封锁,从而导致活锁。
避免活锁的简单方法是采用先来先服务的策略。
当多个事务请求封锁同一数据对象时,封锁子系统按请求封锁的先后次序对事务排队,数据对象上的锁一旦释放就批准申请队列中第一个事务获得锁。
10.请给出预防死锁的若干方法。
答:
在数据库中,产生死锁的原因是两个或多个事务都已封锁了一些数据对象,然后又都请求已被其他(二级封锁协议能否避免死锁)事务封锁的数据加锁,从而出现死等待。
防止死锁的发生其实就是要破坏产生死锁的条件。
预防死锁通常有两种方法:
(1)一次封锁法,要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行;
(2)顺序封锁法,预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。
不过,预防死锁的策略不大适合数据库系统的特点,具体原因可参见《概论》8.4。
11.请给出检测死锁发生的一种方法,当发生死锁后如何解除死锁
答:
数据库系统一般采用允许死锁发生,dbms检测到死锁后加以解除的方法。
dbms中诊断死锁的方法与操作系统类似,一般使用超时法或事务等待图法。
超时法是:
如果一个事务的等待时间超过了规定的时限,就认为发生了死锁。
超时法实现简单,但有可能误判死锁,事务因其他原因长时间等待超过时限时,系统会误认为发生了死锁。
若时限设置得太长,又不能及时发现死锁发生。
dbms并发控制子系统检测到死锁后,就要设法解除。
通常采用的方法是选择一个处理死锁代价最小的事务,将其撤消,释放此事务持有的所有锁,使其他事务得以继续运行下去。
当然,对撤销的事务所执行的数据修改操作必须加以恢复。
12.什么样的并发调度是正确的调度
答:
可串行化(sertalizable)的调度是正确的调度。
可串行化的调度的定义:
多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行执行它们时的结果相同,称这种调度策略为可串行化的调度。
13.设t1,t2,t3是如下的3个事务:
t1:
a:
=a+2;
t2:
a:
=a*2;
t3:
a:
=a**2;
设a的初值为0。
(1)若这3个事务允许并行执行,则有多少可能的正确结果,请一一列举出来。
答:
a的最终结果可能有2、4、8、16。
因为串行执行次序有t1t2t3、t1t3t2、t2t1t3、t2t3t1、t3t1t2、t3t2t1。
对应的执行结果是16、8、4、2、4、2。
(2)请给出一个可串行化的调度,并给出执行结果答:
slocka
y=a=o
unlocka
xlocka
slocka
等待
写回等待
等待
slocka
a=y*2等待
写回a(=4)等待
unlocka等待
y=a=4
unlocka
xlocka
写回a(=16)
unlocka
最后结果a为16,是可串行化的调度。
(3)请给出一个非串行化的调度,并给出执行结果。
答:
slocka
y=a=0
slocka
y=a=0
xlocka
等待a=y+2
写回等待
unlocka
xlocka
等待等待写回a(=4)
等待a=y*2
写回unlocka
最后结果a为0,为非串行化的调度。
(4)若这3个事务都遵守两段锁协议,请给出一个不产生死锁的可串行化调度。
答:
slocka
y=a=o
xlocka
写回等待
等待
篇三:
数据库中预防死锁通常有两种方法:
一种叫(16),它要求每个事物必须
一、整体解读
试卷紧扣教材和考试说明,从考生熟悉的基础知识入手,多角度、多层次地考查了学生的数学理性思维能力及对数学本质的理解能力,立足基础,先易后难,难易适中,强调应用,不偏不怪,达到了“考基础、考能力、考素质”的目标。
试卷所涉及的知识内容都在考试大纲的范围内,几乎覆盖了高中所学知识的全部重要内容,体现了“重点知识重点考查”的原则。
1.回归教材,注重基础
试卷遵循了考查基础知识为主体的原则,尤其是考试说明中的大部分知识点均有涉及,其中应用题与抗战胜利70周年为背景,把爱国主义教育渗透到试题当中,使学生感受到了数学的育才价值,所有这些题目的设计都回归教材和中学教学实际,操作性强。
2.适当设置题目难度与区分度
选择题第12题和填空题第16题以及解答题的第21题,都是综合性问题,难度较大,学生不仅要有较强的分析问题和解决问题的能力,以及扎实深厚的数学基本功,而且还要掌握必须的数学思想与方法,否则在有限的时间内,很难完成。
3.布局合理,考查全面,着重数学方法和数学思想的考察
在选择题,填空题,解答题和三选一问题中,试卷均对高中数学中的重点内容进行了反复考查。
包括函数,三角函数,数列、立体几何、概率统计、解析几何、导数等几大版块问题。
这些问题都是以知识为载体,立意于能力,让数学思想方法和数学思维方式贯穿于整个试题的解答过程之中。