- 设T1、T2、T3,是如下的三个事务,设A的初值为0。
T1:A:=A+2;
T2:A:=A2:
T3:A:=A**2; (即 A←A^2)
(1)若这三个事务允许并发执行,则有多少种可能的正确结果?请一一列举出来。
(2)请给出一个可串行化的调度,并给出执行结果。
(3)请给出一个非串行化的调度,并给出执行结果。
(4)若这三个事务都遵守两段锁协议,请给出一一个不产生死锁的可串行化调度。
(5)若这三个事务都遵守两段锁协议。请给出一个产生死锁的调度.
答:
设T1、T2、T3,是如下的三个事务,设A的初值为0。
T1:A:=A+2;
T2:A:=A2;
T3:A:=A*A;(A←A^2)
①若这三个事务允许并行执行,则有多少可能的正确结果,请一以列举出来
答:
A的最终结果可能有2、4、8、16。
因为串行执行次序有T1T2T3;T1T3T2;T2T1T3;T2T3T1;T3T1T2;T3T2T1。对应的执行结果是16;8:4;2;4;2。
②请给出一个可串行化的调度4井给出执行结果
答:
T1 | T2 | T3 |
Slock A | ||
Y=A=0 | ||
Unlock A Xlock A | ||
A=Y+2 | Slock A | |
写回A(=2) | 等待 | |
Unlock A | 等待 | |
等待 | ||
Y=A=2 | ||
Unlock A | ||
Xlock A | ||
Slock A | ||
A=Y*2 | 等待 | |
写回A(=4) | 等待 | |
Unlock A | 等待 | |
Y=A=4 | ||
Unlock A | ||
Xlock A | ||
A=Y*Y | ||
写回A(=16) | ||
Unlock A |
最后结果A为16,是可串行化的调度。
(3)请给出一个非串行化的调度,并给出执行结果。
答:
T1 | T2 | T3 |
Slock A | ||
Y=A=0 | ||
Unlock A | ||
Slock A | ||
Xlock A | ||
等待 | Unlock A | |
A=Y+2 | 等待 | |
写回A(=2) | Slock A | |
Unlock A | 等待 | |
Y=A=2 | ||
Unlock A | ||
Xlock A | ||
Xlock A | ||
等待 | Y=Y**2 | |
等待 | 写回A(=4) | |
等待 | Unlock A | |
A=Y*2 | ||
写回A(=0) | ||
Unlock A |
最后结果A为0,是非可串行化的调度。
4)若这三个事务都遵守两段锁协议,请给出一个不产生死锁的可串行化调度。
答:
T1 | T2 | T3 |
Slock A | ||
Y=A=0 | ||
Xlock A | ||
A=Y+2 | Slock A | |
写回A(=2) | 等待 | |
Unlock A | 等待 | |
Y=A=2 | ||
Xlock A | ||
Unlock A | 等待 | Slock A |
A=Y*2 | 等待 | |
写回A(=4) | 等待 | |
Unlock A | 等待 | |
Y=A=4 | ||
Unlock A | ||
Xlock A | ||
A=Y**2 | ||
写回A(=16) | ||
Unlock A | ||
Unlock A |
(5)若这三个事务都遵守两段锁协议,请给出一个产生死锁的调度。
T1 | T2 | T3 |
Slock A | ||
Y=A=0 | ||
Slock A | ||
Y=A=0 | ||
Xlock A | ||
等待 | ||
Xlock A | ||
等待 | ||
Slock A | ||
Y=A=0 | ||
Xlock A | ||
等待 |
-
今有三个事务的一个调度r3(B)r1(A)w3(B)r2(B)r2(A)w2(B)r1(B)w1(A),该调度是冲突可串行化的调度吗?为什么?
答:
是冲突可串行化的调度。
Scl=r3(B) r1(A) w3(B) r2(B) r2(A) w2(B) r1(B) w1(A),交换r1(A)和w3(B),得到
r3(B) w3(B) r1(A) r2(B) r2(A) w2(B) r1(B) w1(A)
再交换r1(A)和r2(B) r2(A) w2(B),得到
Sc2=r3(B) w3(B) r2(B) r2(A) w2(B) r1(A) r1(B) w1(A)
由于Sc2是串行的,而且两次交换都是基于不冲突操作的,所以
Sc1=r3(B) r1(A) w3(B) r2(B) r2(A) w2(B) r1(B) w1(A)
是冲突可串行化的调度。 -
考虑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,增加加锁操作和解锁操作, 并要求遵循两阶段封锁协议。
(2)说明T1和T2的执行是否会引起死锁,给出T1和T2的一个调度并说明之。
答:
(1)
T1 | T2 |
Slock A | Slock B |
R(A) | R(B) |
Xlock B | Xlock A |
R(B) | R(A) |
B=A+B | A=A+B |
W(B) | W(A) |
Unlock A | Unlock B |
Unlock B | Unlock A |
(2)
T1 | T2 |
Slock A | |
R(A) | |
Slock B | |
R(B) | |
Xlock A | |
Xlock B |