一、题目描述
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两个事务永远不能结束,形成死锁。