数据库第十一章课后题(2020.5.11作业)

1.设T1、T2、T3是如下的三个事务,设A的初值为0.
T1:A:=A+2;
T2:A:=A*2;
T3:A:=A**2; (即 A←A²)
(1)若这三个事务允许并发执行,则有多少种可能的正确结果?请一一列举出来。
有四种,分别为16、8、4、2:
T1 T2 T3 – 16
T1 T3 T2 – 8
T2 T1 T3 – 4
T3 T1 T2 – 4
T2 T3 T1 – 2
T3 T2 T1 – 2

(2)请给出一个可串行化的调度,并给出执行结果。

T1 T2 T3
Slock A
Y=R(A)=0
Unlock A
Xlock A
Slock A
等待 A=Y**2
等待 W(A)
等待 Unlock A
Y=R(A)=0
Unlock A
Xlock A
Slock A
等待 A=Y*2
等待 W(A)
等待 Unlock A
Y=R(A)=0
Unlock A
Xlock A
A=Y+2
W(A)
Unlock A

A=2

(3)请给出一个非串行化的调度,并给出执行结果。

T1 T2 T3
Slock A
Y=R(A)=0
Slock A
Unlock A 等待
Y=R(A)=0
Unlock A
Xlock A
A=Y+2
Slock A
W(A) 等待
Unlock A 等待
Y=R(A)=2
Unlock A
Xlock A
A=Y*2
Xlock A
W(A) 等待
Unlock A 等待
A=Y**2
W(A)
Unlock A

A=0

(4)若这三个事务都遵守两段锁协议,请给出一个不产生死锁的可串行化调度。

T1 T2 T3
Slock A
Y=R(A)=0
Xlock A
A=Y**2
Slock A
等待 W(A)
等待 Unlock A
Y=R(A)=0
Xlock A
等待 Unlock A
A=Y+2
Slock A
W(A) 等待
Unlock A 等待
Y=R(A)=0
Xlock A
Unlock A 等待
A=Y*2
W(A)
Unlock A
Unlock A

(5)若这三个事务都遵守两段锁协议,请给出一个产生死锁的调度。

T1 T2 T3
Slock A
Y=R(A)=0
Slock A
Y=R(A)=0
Xlock A
等待
Xlock A 等待
等待 等待
等待 Slock A 等待
等待 Y=R(A)=0 等待
等待 Xlock A 等待
等待 等待 等待
等待 等待 等待

2.今有三个事务的一个调度r3(B)r1(A)w3(B)r2(B)r2(A)w2(B)r1(B)w1(A),该调度是冲突可串行化的调度吗?为什么?
经交换得调度r3(B)w3(B)r2(B)w2(B)r2(A)r1(B)r1(A)w1(A),
等价于一个串行调度T3,T2,T1,所以是冲突可串行化的调度

3.考虑T1和T2两个事务。
T1: R(A); R(B);B=A+B; W(B) T2:R(B); R(A);A=A+B; W(A)
(1)改写T1和T2,增加加锁操作和解锁操作, 并要求遵循两阶段封锁协议。

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

(2)说明T1和T2的执行是否会引起死锁,给出T1和T2的一个调度并说明之。
调度如上表
不会引起死锁。增加加锁操作和解锁操作,T1、T2可串行执行.

总结:这是最后一次作业,难度同样不是很大,很好理解,用时60分钟

原创文章 23 获赞 35 访问量 1万+

猜你喜欢

转载自blog.csdn.net/MooM_X/article/details/106054327