怎么证明遵循两段锁协议的事务调度处理的结果是可串行化的?
发布网友
发布时间:2022-04-08 02:45
我来回答
共5个回答
热心网友
时间:2022-04-08 04:14
*********************************
证明如下,(书上摘的)。
*********************************
证明:首先以两个并发事务 Tl 和T2为例,存在多个并发事务的情形可以类推。根据可串行化定义可知,事务不可串行化只可能发生在下列两种情况:
( l )事务 Tl 写某个数据对象 A ,T2读或写 A ;
( 2 )事务 Tl 读或写某个数据对象 A ,T2写 A 。
下面称 A 为潜在冲突对象。
设 Tl 和T2访问的潜在冲突的公共对象为{A1,A2 … , An }。不失一般性,假设这组潜在冲突对象中 X =(A 1 , A2 , … , Ai }均符合情况 1 。 Y ={A i + 1 , … , An }符合所情况( 2 )。
VX ∈ x , Tl 需要 XlockX ①
T2 需要 Slockx 或 Xlockx ②
1 )如果操作 ① 先执行,则 Tl 获得锁,T2等待
由于遵守两段锁协议, Tl 在成功获得 x 和 Y 中全部对象及非潜在冲突对象的锁后,才会释放锁。
这时如果存在 w ∈ x 或 Y ,T2已获得 w 的锁,则出现死锁;否则, Tl 在对 x 、 Y 中对象全部处理完毕后,T2才能执行。这相当于按 Tl 、T2的顺序串行执行,根据可串行化定义, Tl 和几的调度是可串行化的。
2 )操作 ② 先执行的情况与( l )对称因此,若并发事务遵守两段锁协议,在不发生死锁的情况下,对这些事务的并发调度一定是可串行化的。证毕。
*********************************
以上,希望对你有所帮助。
*********************************
热心网友
时间:2022-04-08 05:32
尊循两段锁协议的事务调度处理的结果是可串行化的充分条件
但是可串行化并不一定遵循两段锁协议
2段锁协议举个例子是这样的、
事务 R1 R2 R3
R(R1),R(R2),R(R3),W(R3),W(R2),W(R1)
R是读 W是写 即是操作的意思
概念就是操作完后不可出现再加锁
热心网友
时间:2022-04-08 07:07
王能斌的《数据库系统教程》上面有证明的全过程,在7.8.2节
其实这个很好直观感受的,既然所有的加锁动作都在解锁之前,想要使用的资源必须要先占有他,自然不会发生冲突。所以说事务遵守两段锁协议是可串行化调度的充分条件,而不是必要条件。可串行化的调度中,不一定所有事务都必须符合两段锁协议。
热心网友
时间:2022-04-08 08:58
不太明白你的意思。
热心网友
时间:2022-04-08 11:06
数据
并发操作