下面说法正确的是()A、遵循两段锁协议保证不会产生死锁B、不遵循两段锁协议一定产生死锁C、并发调度是正确的,当且仅当这些事务遵循两段锁协议D、如果事务都遵循两段锁协议,则这些事务的任何并发调度都是可串行化的

题目

下面说法正确的是()

  • A、遵循两段锁协议保证不会产生死锁
  • B、不遵循两段锁协议一定产生死锁
  • C、并发调度是正确的,当且仅当这些事务遵循两段锁协议
  • D、如果事务都遵循两段锁协议,则这些事务的任何并发调度都是可串行化的
如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

两阶段锁协议可以保证并发调度的可串行性。关于两阶段锁协议,下列说法错误的是

A.在一个可串行化调度中,并不一定所有事务都必须符合两阶段锁协议

B.如果一个事务遵循两阶段锁协议,则这个事务中的第一个解锁操作必须出现在该事务的最后一个加锁操作之后

C.如果一个事务已经对数据项A加了共享锁,则其他事务不能再对A加任何锁

D.在解锁阶段,事务可以释放任何数据项上的任何类型的锁


正确答案:C
解析:锁的类型有两种:①互斥锁(X锁),若事务T获得Q上的X锁,则T可以读取和修改Q,其他事务不能再对Q进行任何操作,直到T释放Q上的锁。②共享锁(S锁),若事务T获得Q上的S锁,则T可以对Q进行读取操作,但不可以修改。此时,允许其他事务再申请获得Q上的s锁,与T并行读取Q。但在T释放Q上的S锁之前,其他事务不能对Q做任何修改。

第2题:

______能保证不产生死锁。

A.两段锁协议

B.一次封锁法

C.2级封锁法协议

D.3级封锁协议


正确答案:B

第3题:

( 48 )下列叙述中正确的是

A )遵守两阶段封锁协议的并发事务一定是可串行化的

B )遵守两阶段封锁协议的并发事务一定不会发生死锁

C )遵守两阶段封锁协议的并发事务一定不会发生级联回滚

D )遵守两阶段封锁协议的并发事务的所有锁一定要到事务提交之后才解锁


正确答案:D

第4题:

● 为保证并发事务调度的正确性,可采用的封锁协议是 () 。()A.PXC协议 B.PSC协议 C.两段锁协议 D.PSC或PXC协议


正确答案:C
如果多个事务并发执行的结果与按串行执行的结果相同,叫可串行化调度。可串行化调度是并发事务正确性的准则。
  两段锁协议(2PL Two-Phase Locking)是保证并发调度可串行性的封锁协议。指必须分两个阶段对数据进行加锁和解锁,分扩阶段(申请加锁),第二阶段是收缩阶段(释放锁)。但2PL不能保证不发生死锁。

第5题:

下列叙述中,正确的是( )。A.不遵循两段封锁协议的并发调度一定是不可串行的B.两级封锁协议可以保证数据的可重读性C.对某个数据对象加了X封锁,则还可以在该数据对象上加S封锁D.遵循两段封锁协议的并发事务一定不会发生死锁


正确答案:B
A,D的说法太过于绝对,不准确,C项对数据对象加了X封锁之后,则不能再加S封锁。

第6题:

能保证不产生死锁。

A.两段锁协议

B.一次封锁法

C.2级封锁协议

D.3级封锁协议


正确答案:B
解析:本题考查应试者对事务处理程序加锁协议的掌握。两段锁协议是指事务处理程序对数据进行读写操作前加锁,释放一个锁之后就不能再加锁,两段锁协议用来保证事务的可串行化(执行结果的正确性),但并不能保证产生死锁;一次封锁法是指事务处理程序在所有要进行读写操作的数据全部先加锁后再进行访问,在两段锁协议的基础上要求更严格,能保证不产生死锁;2级封锁协议是指事务处理程序在进行修改数据操作之前先对其加独占锁,直到事务处理程序结束前释放,在进行读取数据操作之前先对其加共享锁,读完后就释放,2级封锁协议可以防止丢失修改和读“脏”数据;3级封锁协议比是指事务处理程序在进行修改数据操作之前先对其加独占锁,直到事务处理程序结束前释放,在进行读取数据操作之前先对其加共享锁,直到事务处理程序结束前释放,比2级封锁协议更严格,可以防止丢失修改、读“脏”数据和不可重复读三种错误。除一次封锁法外,其他3个协议都是保证程序执行的正确性的,都可能产生死锁,但死锁问题可以由DBMS进行处理,而一次封锁法在实现上也困难,通常不采用。此题答案为B。

第7题:

下列叙述中正确的是

A.遵守两阶段封锁协议的并发事务一定是可串行化的

B.遵守两阶段封锁协议的并发事务一定不会发生死锁

C.遵守两阶段封锁协议的并发事务一定不会发生级联回滚

D.遵守两阶段封锁协议的并发事务的所有锁一定要到事务提交之后才解锁


正确答案:D
解析:系列中的每个事务遵从封锁协议的一组规则。这些规则规定事务何时对各数据项进行加锁、解锁。封锁协议限制了可能的调度数目。(1)保证可串行性的一个协议是强有力两阶段封锁协议。(2)通过将两阶段封锁修改为严格两阶段封锁协议来避免级联回滚。(3)两阶段封锁的另一个变体是强两阶段封锁协议,它要求事务提交之间不得释放任何锁。(4)不幸的是封锁自身也会引发问题,主要的问题是死锁。两阶段封锁并不保证不会发生死锁。发生死锁时系统必须能检测并解释它。

第8题:

若这三个事务都遵守两段锁协议,那么是否存在事实上可串行化但又不能形成的调度?


正确答案:存在。
存在。 解析:在并行系统环境下,事务并发操作的调度的可串行性的标准如下:
调度结果的正确:保持数据库的一致状态。几个事务的并行执行是正确的,当且仅当其结果与按某一次序串行的执行它们时的结果相同。可串行性是并行事务正确性的唯一准则。
因此,若有3个事务并行执行时,可能的正确结果与3个事务串行执行的结果应该相同。由于3个事务串行执行有6种可执行方案,因此有6种可能的正确结果。若事务不施加任何锁,数据项则可以同时被读写。假设Ri,Rj,Rk分别表示三种检索操作R1,R2,R3,顺序无关紧要;类似地,Up,Uq,Ur分别表示更新操作U1, U2,U3,顺序也无关紧要。但事务内部操作顺序是固定的。因此,可能的调度是:
Ri-Rj -Rk-Up-Uq-Ur:3*2*1*3*2*1=36
Ri-Rj-Up -Rk- Uq-Ur:3* 2* 2*1*2*1=24
Ri-Rj-Up-Uq-Rk-Ur:3*2*2*1*1*1=12
Ri-Up-Rj-Rk-Uq-Ur:3*1*2*1*2*1=12
Ri-Up-Rj-Uq-Rk-Ur:3*1*2*1*1*1=6
由此可见,总共有90种可能的调度。本例能够产生“正确”结构但不可串行化的调度。例如:调度R1- R2-R3-U3-U2-U1得到的结果与6个可能的串行调度中的两个相同。这样,对于给定的初始值。恰好是“正确的”。但必须清楚这个正确只是巧合,完全是因为初始值恰好为。才得到的,对其他的初始值则未必如此。例如,考虑初始值为10而非0的情况,上面给出的调度R1- R2-R3-U3-U2-U1就不能得到正确的结果。因此,该调度是不可串行的。调度R1-R3 -U1-U3-R2-U2是可串行的(等价于串行调度T1-T3-T2),但在T1,T2和T3都遵守两段锁协议时不能出现。因为在这一协议下,操作R3会代表事务T3.在A上获得s锁;这样事务T1中的操作U1就无法在该锁释放前进行,且直到T3结束时才会发生。事实上,事务T3和T1在操作U3到达时将发生死锁。

第9题:

下列叙述中,正确的是

A.不遵循两段锁协议的并发调度一定是不可串行的

B.两级封锁协议可能保证数据的可重读性

C.对某处数据对象加了X封锁,则还可以在该数据对象上加S封锁

D.遵循两段封锁协议的并发事务一定不会发生死锁


正确答案:B
解析:两段锁协议是保证并发调度可串行化的充分条件:对某个数据对象加了X锁,则其他任何事务不能再对该数据对象加任何类型的锁;遵循两段锁协议的并发事务可能发生死锁。

第10题:

如右图所示的调度,其中事务T1、T2仅对数据项A、B进行操作,则该调度( );

A.满足两段锁协议、不发生死锁
B.满足两段锁协议、会发生死锁
C.不满足两段锁协议、不发生死锁
D.不满足两段锁协议、会产生死锁

答案:B
解析:
本题考查事务调度的知识。事务的执行由DBMS进行调度,在执行事务的过程中加入相关锁指令以控制事务满足ACID属性。常用的方式是两段锁协议(2PL),即事务的加锁和解锁分为两个阶段,第一阶段为锁增长阶段,只能加锁不能解锁,第二阶段为锁减少阶段,只能解锁不能加锁。图中的调度,事务T1对8、A两个数据项加锁中间无解锁指令,满足2PL协议;事务T2对A、B两个数据项加锁中间无解锁指令,也满足2PL协议。2PL协议不能避免死锁。图中事务T1先对数据项B加了独占锁,事务T2先对数据A加了共享锁;随后事务T2申请数据项B上的共享锁,只能等待事务T1释放B上的独占锁;事务T1申请数据项A上的独占锁,只能等待事务T2释放A上的共享锁。两个事务相互等待造成死锁。死锁的解除由DBMS来完成。需要在造成死锁的多个事务中选择一个回滚代价最小的事务进行强制回滚,并将该事务置于事务队列中稍后执行。图中事务T1对数据B己经做了修改,事务T2只是读取了数据A,相对而言,回滚事务T2代价最小。