设T1,T2是两个事务如下:
T1:
A
:
=
A
+
2
,
B
=
B
×
2
A:=A+2,B=B\times2
A:=A+2,B=B×2;
T2:
A
:
=
A
×
2
,
B
=
B
+
2
A:=A\times2,B=B+2
A:=A×2,B=B+2;
设A,B的初值都为0
(1)若这两个事务容许并发执行,则有多少种可能的正确结果?请一一例举出来;
有两种可能:
T1 T2 ——
A
=
4
,
B
=
2
A=4,B=2
A=4,B=2
T2 T1 ——
A
=
2
,
B
=
4
A=2,B=4
A=2,B=4
(2)请给出一个可串行化的调度,并给出执行结果;
T1 | T2 |
---|---|
SlockA | |
Y=Read(A)=0 | |
Unlock A | |
Xlock A | |
A=Y+2 | |
Write(A) | |
Unlock A | |
SlockB | |
Z=Read(B)=0 | |
Unlock B | |
Xlock B | |
B=Z*2 | |
Write(B) | |
Unlock B | |
SlockA | |
Y=Read(A)=0 | |
Unlock A | |
Xlock A | |
A=Y*2 | |
Write(A) | |
Unlock A | |
SlockB | |
Z=Read(B)=0 | |
Unlock B | |
Xlock B | |
B=Z+2 | |
Write(B) | |
Unlock B | |
结果: A = 4 , B = 2 A=4,B=2 A=4,B=2 |
(3)请给出一个非串行化的调度,并给出执行结果;
T1 | T2 |
---|---|
SlockA | |
Y=Read(A)=0 | |
Unlock A | |
Xlock A | |
SlockA | |
A=Y+2 | 等待 |
Write(A) | 等待 |
Unlock A | 等待 |
Y=Read(A)=0 | |
Unlock A | |
Xlock A | |
SlockB | |
等待 | A=Y*2 |
等待 | Write(A) |
等待 | Unlock A |
Z=Read(B)=0 | |
Unlock B | |
Xlock B | |
SlockB | |
B=Z*2 | 等待 |
Write(B) | 等待 |
Unlock B | 等待 |
Z=Read(B)=0 | |
Unlock B | |
Xlock B | |
B=Z+2 | |
Write(B) | |
Unlock B | |
结果: A = 0 , B = 2 A=0,B=2 A=0,B=2 |
(4)若这两个事务都遵守两段锁协议,请给出一个不产生死锁的可串行化的调度;
T1 | T2 |
---|---|
SlockA | |
Y=Read(A)=0 | |
Xlock A | |
A=Y+2 | |
Write(A) | |
SlockB | |
Z=Read(B)=0 | |
Xlock B | |
B=Z*2 | |
Write(B) | |
Unlock A | |
Unlock A | |
Unlock B | |
Unlock B | |
SlockA | |
Y=Read(A)=0 | |
Xlock A | |
A=Y*2 | |
Write(A) | |
SlockB | |
Z=Read(B)=0 | |
Xlock B | |
B=Z+2 | |
Write(B) | |
Unlock A | |
Unlock A | |
Unlock B | |
Unlock B |
(5)若这两个事务都遵守两段锁协议,请给出一个产生死锁的可串行化的调度;
T1 | T2 |
---|---|
SlockA | |
SlockA | |
Xlock A | |
等待 | |
等待 | Xlock A |
等待 | 等待 |