《数据库系统概论》第十一章习题

  • 格式:doc
  • 大小:31.00 KB
  • 文档页数:4

第十一章习题
9.设T1,T2,T3是的三个事务:
T1:A:=A+2;
T2:A:=A*2;
T3:A:=A**2;(A←A2)
设A的初值为0;
(1)若这三个事务允许并发执行,则有多少种可能的正确结果,请一一列举出来;
(2)请给出一个可串行化的调度,并给出执行结果;
(3)请给出一个非串行化的调度,并给出执行结果;
(4)若这三个事务都遵守两段锁协议,请给出一个不产生死锁的可串行化调度;
(5)若这三个事务都遵守两段锁协议,请给出一个产生死锁的调度。
解:(1)4种 A=16,8,4,2
T1―T2―T3 A=16
T1―T3―T2 A=8
T2―T1―T3 或T3―T1―T2 A=4
T2―T3―T1 或T3―T2―T1 A=2

(2)一个可串行化的调度及执行结果如下图所示:


T1 T2 T3

t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 Slock A X=A=0 Unlock A Xlock A A=X+2 写回A(=2) Unlock A Slock A 等待 等待 等待 获得Slock A X=A=2 Unlock A Xlock A A=X*2 写回A(=4) Unlock A

Slock A
等待
等待
等待
获得Slock A
X=A=4
Unlock A
Xlock A
A=X2
写回A(=16)
Unlock A
t2
1
t2
2
t2
3

执行结果为A=16,是可串行化的调度。
(3)一个非串行化调度及执行结果如下图所示:


T1 T2 T3

t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 Slock A X=A=0 Unlock A Xlock A 等待 获得Xlock A A=X+2 写回A(=2) Unlock A Slock A X=A=0 Unlock A Xlock A 等待 等待 等待 获得Xock A A=X*2 写回A(=0) Unlock A

Slock A
等待
获得Slock A
X=A=4
Unlock A
Xlock A

A=X
2
写回A(=4)
Unlock A
t1
8
t1
9
t2
0
t2
1
t2
2
t2
3

运行结果A=0,为非串行化调度。
(4)若三个串行事务都遵守两段锁协议,下图是按T3-T1-T2顺序运行的一个不产生死
锁的可串行化调度;


T1 T2 T3

t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12 t13 Slock A 等待 等待 X=A=0 Xlock A 等待 A=X+2 写回A(=2) Unlock A Unlock A Slock A 等待 等待 等待 X=A=2 Xlock A 等待 A=X*2 写回A(=4) Unlock A Unlock A Slock A
X=A=0
Xlock A
A=X2
写回A(=0)
Unlock A

Unlock A

从上可见,按照T3-T1-T2的顺序执行结果A=4完全与串行化调度相同,所以是一个不
产生死锁的可串行化的调度。

(5)若三个事务都遵守两段锁协议,下图是一个产生死锁的调度。


T1 T2 T3
t1 t2 t3 t4 t5 t6 t7 t8 Slock A X=A=0 Xlock A 等待 Slock A X=A=0 Xlock A 等待
Slock A
X=A=0
Xlock A
等待

上例中,T1申请对X1加写锁,由于T2对X1加了读锁,所以不成功,处于等待状态;
T2申请对A加写锁,由于T1对A加了读锁,所以不成功,处于等待状态;T3申请对A加读
锁,由于T1对A加了读锁,所以不成功,处于等待状态。因此,三个事务都处于等待状态,
产生死锁。

精心搜集整理,只为你的需要