数据库系统原理———两段锁协议、死锁练习题

一、题目描述

14.考虑T和T2两个事务。
T1: R(A); R(B);B=A+ B; W(B)
T2: R(B); R(A);A=A+ B; W(A)
(1)改写T和T2, 增加加锁操作和解锁操作,并要求遵循两阶段封锁协议。
(2)说明T和T2的执行是否会引起死锁,给出T和T2的一个调度并说明之。

二、问题解答

(1)如下表所示

T1 T2
Slock A
R(A)
Slock B
R(B)
Xlock B
B=A+B
W(B)
Unlock B
Slock B
R(B)
Unlock B
Unlock A
Slock A
R(A)
Xlock A
A=A+B
W(A)
Unlock A
Unlock A
Unlock B

(2)如下调度会引起死锁:

T1 T2
Slock A
R(A)
Slock B
R(B)
SlockB
R(B)
Xlock B
等待 Slock A
等待 R(A)
等待 Xclock A
等待

ps:
死锁的定义:如果事务T1封锁了数据R,T2封锁了数据R2,然后T1又请求封锁R2,因T2已封锁了R2, 于是T1等待T2释放R2上的锁:接着T2又申请封锁R,因T1已封锁了R1, T2也只能等待T1释放R上的锁。这样就出现了T1在等待T2,而T2又在等待T1的局面,T1和T2两个事务永远不能结束,形成死锁。

你可能感兴趣的:(数据库笔记)