9、设T1、T2、T3是如下三个事物,设A的初值为0.
T1:A:=A+2;
T2:A:=A*2;
T3:A:=A**2;(即A
←
\leftarrow
←
A
2
A^2
A2)
(1)若这三个事物允许并发执行,则有多少种可能的正确结果?请一一列举出来。
可能会产生的结果有:2、4、8、16
T1T2T3 16
T1T3T2 8
T2T1T3 4
T2T3T1 2
T3T1T2 4
T3T2T1 2
(2)请给出一个可串行化的调度,并给出执行结果。csdn MarkDown 绘制表格
结果为:16
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)=2 | ||
Unlock A | ||
Xlock A | ||
Slock A | ||
A=Y*2 | 等待 | |
W(A) | 等待 | |
Unlock A | 等待 | |
Y=R(A)=4 | ||
Unlock A | ||
Xlock A | ||
A=Y**2 | ||
W(A) | ||
Unlock A |
(3)请给出一个非串行化的调度,并给出执行结果。
执行结果为:0
T1 | T2 | 3 |
---|---|---|
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)=0 | ||
Unlock A | ||
Xlock A | ||
A=Y+2 | Xlock A | |
W(A) | 等待 | |
Unlock A | 等待 | |
A=Y**2 | ||
W(A) | ||
Unlock A | ||
(4)若这三个事物都遵守两段锁协议,请给出一个不产生死锁的可串行化调度。 | ||
T1 | T2 | T3 |
- | - | - |
Slock A | ||
Y=R(A)=0 | ||
Xlock A | ||
A=Y+2 | ||
Slock A | ||
W(A) | 等待 | |
Unlock A | 等待 | |
Y=R(A)=2 | ||
Xlock A | ||
Unlock A | 等待 | Slock A |
A=Y*2 | 等待 | |
W(A) | 等待 | |
Unlock A | 等待 | |
Y=R(A)=4 | ||
Unlock A | ||
Xlock 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 | ||
等待 |
10、今有三个事物的一个调度r3(B)r1(A)w3(B)r2(B)r2(A)w2(B)r1(B)w1(A),该调度是冲突可串行化的调度吗?为什么?
是冲突可串行化的调度,冲突操作是指不同事物对同一数据的读写操作和写写操作。
不同事物的读写或写写操作之间可以交换位置,同种事物的读读操作之间也可以交换位置,所以交换位置之后为:r3(B)w3(B)r2(B)r2(A)w2(B)r1(A)r1(B)w1(A),等价于一个串行调度T3T2T1,所以是冲突可串行化的调度。
14、考虑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 | |
X=R(A) | |
Slock B | |
Y=R(B) | |
Xlock B | |
B=X+Y | |
W(B) | |
Unlock B | |
Slock B | |
X=R(B) | |
Unlock B | |
Unlock A | |
Slock A | |
Y=R(A) | |
XlockA | |
A=X+Y | |
W(A) | |
Unlock A | |
Unlock A | |
Unlock B | |
(2)说明T1和T2的执行是否会引起死锁,给出T1和T2的一个调度并说明之。 | |
可能会引起死锁。下面的调度应该会引起死锁。 | |
T1 | T2 |
- | - |
Slock A | |
X=R(A) | |
Slock B | |
Y=R(B) | |
Slock B | |
Y=R(B) | |
Xlock B | |
等待 | Slock A |
等待 | X=R(A) |
等待 | Xlock A |
等待 |