(1)T1最后执行:2、T1->T2->T3:16、T1->T3->T2:8、T3->T1->T2(T2->T1->T3):4
(2)
T1 | T2 | T3 |
---|---|---|
Slock A | ||
Y=A=0 | ||
Unlock A | ||
Xlock A | ||
Slock A | ||
A=Y+2 | 等待 | |
写回A | 等待 | |
Unlock A | 等待 | |
Y=A=2 | ||
Unlock A | ||
Xlock A | ||
Slock A | ||
A=Y=2 | 等待 | |
写回 A | 等待 | |
Unlock A | 等待 | |
Y=A=4 | ||
Unlock A | ||
Xlock A | ||
A=Y**2 | ||
写回A | ||
Unlock A |
(3)
T1 | T2 | T3 |
---|---|---|
Slock A | ||
Y=A=0 | ||
Unlock A | ||
Slock A | ||
Y=A=0 | ||
Xlock A | ||
等待 | Unlock A | |
A=Y+2 | ||
写回 A | Slock A | |
Unlock A | 等待 | |
Y=A=2 | ||
Unlock A | ||
Xlock A | ||
Xlock A | ||
等待 | Y=Y**2 | |
等待 | 写回A | |
等待 | Unlock A | |
A=Y*2 | ||
写回A | ||
Unlock A |
(4)
T1 | T2 | T3 |
---|---|---|
Slock A | ||
Y=A=0 | ||
Xlock A | ||
A=Y+2 | Slock A | |
写回 A | 等待 | |
Unlock A | 等待 | |
Y=A=2 | ||
Xlock A | ||
Unlock A | 等待 | Slock A |
A=Y*2 | 等待 | |
写回A | 等待 | |
Unlock A | 等待 | |
Y=A=4 | ||
Unlock A | ||
Xlock A | ||
A=Y**2 | ||
写回A | ||
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 | ||
等待 |
如果调度中一对连续操作是冲突的,则意味着如果它们的执行顺序交换,则至少i改变其中一个事务的最终执行结果。
如果两个连续操作不冲突,则可以在调度中交换顺序。
一个调度S在保证冲突操作的次序不变的情况下,通过交换两个事务不冲突操作的次序得到另一个调度S’,如果S’是串行的,称调度S为冲突可串行化的调度。
本题中: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)r1(B),最终得到:r3(B)w3(B)r2(B)r2(A)w2(B)r1(B)r1(A)w1(A)
它的执行是T3->T2->T1,所以是冲突可串行调度。
(1)
T1 | T2 |
---|---|
Slock A | |
R(A) | |
Xlock B | |
R(B) | |
B=A+B | |
W(B) | |
Unlock B | Slock B |
Unlock A | R(B) |
Xlock A | |
R (A) | |
A=A+B | |
W(A) | |
Unlock A | |
Unlock B |
(2)若不及时解锁的话,会引起死锁。
T1 | T2 |
---|---|
Slock A | |
R(A) | |
Slock(B) | |
R(B) | |
B=A+B | |
Slock B | |
R(B) | |
Slock A | |
R(A) | |
A=A+B | |
Xlock B | |
等待 | Xlock A |
等待 | 等待 |