设T1,T2是两个事务如下:
T1:
A
:
=
A
+
2
,
B
=
B
×
2
A:=A+2,B=Btimes2
A:=A+2,B=B×2;
T2:
A
:
=
A
×
2
,
B
=
B
+
2
A:=Atimes2,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 |
| 等待 | 等待 |



