证明:首先以两个并发事务
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
)对称因此,若并发事务遵守两段锁协议,在不发生死锁的情况下,对这些事务的并发调度一定是可串行化的
1.{1}A→B P2.{2}CD→A P
3.{3}B→D P
4.{4}CD→E P
5.{5}CE→A P/∴AC→BE
6.{6}AC P
7.{6}A∧-6
8.{16}B →-1.7
9.{136}D →-3.8
10{6}C ∧-6
11{136}CD ∧+9.10
12{1246}E→-4.11
13{1246}BE ∧+8.12
14{124}AC→BE→+6.13
证毕
蕴涵(“→”)是一种命题运算的二元算子,其前域是后域的充分条件。充分条件句就是蕴涵句。p是q的充分条件,意味着有p必定有q;但,无p未必无q。这样p就是q的充分条件。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)