- 9.
- (1)
- (2)
- (3)
- (4)
- (5)
- 10.
- 14.
- (1)
- (2)
- 总结:
设T1、T2、T3是如下的三个事务,设A的初值是0。 T1:A:=A+2; T2:A:=A*2; T3:A:=A**2;
(1)若这三个事务允许并发执行,则有多少可能的正确结果。 串行执行次序有: T1、T2、T3 T1、T3、T2 T2、T1、T3 T2、T3、T1 T3、T1、T2 T3、T2、T1 执行结果分别为:16,8,4,2,4,2 一共有4种可能的正确结果,分别为2,4,8,16
(2)请给出一个可串行化的调度,并给出执行结果。
T1T2T3Slock AR(A)=0Unlock AXlock ASlockAA=A+2等待W(A)=2等待Unlock A等待R(A)=2Unlock AXlock ASlock AA=A*2等待W(A)=4等待Unlock A等待R(A)=4Unlock AXlock AA=A**2W(A)=16Unlock A (3)请给出一个非串行化的调度,并给出执行结果。
T1T2T3Slock AR(A)=0Unlock ASlock AR(A)=0Xlock A等待Unlock AA=A+2W(A) =2Slock AUnlock A等待R(A)=2Unlock AXlock AXlock A等待A=A**2等待W(A)=4等待Unlock AA=A*2W(A)=0Unlock A (4)若这三个事务都遵守两端锁协议,请给出一个不产生死锁的可串行化调度。
T1T2T3Slock AR(A)=0Xlock AA=A+2Slock AW(A)=2等待Unlock A等待R(A)=2Xlock AUnlock A等待Slock AA=A*2等待W(A)=4等待Unlock A等待R(A)=4Unlock AXlock AA=A**2W(A)=16Unlock AUnlock A (5)若这三个事务都遵守两端锁协议,请给出一个产生死锁的调度。
T1T2T3Slock AR(A)=0Slock AR(A)=0Xlock A等待等待…Xlock A等待…Slock AR(A)=0Xlock A等待… 10.今有三个事务的一个调度r3(B)r1(A)w3(B)r2(B)r2(A)w2(B)r1(B)w1(A),该调度是冲突可串行化的调度吗?
由于r1(A)和w3(B)是不冲突操作,交换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)是不冲突操作,交换,可得 r3(B)w2(B)r2(B)r2(A)w2(B)r1(A)r1(B)w1(A)是一个串行调度 所以原调度是冲突可串行化调度。
14.对于T1和T2: T1:R(A);R(B);B=A+B;W(B) T1:R(B);R(A);A=A+B;W(A)
(1)改写T1和T2,增加加锁操作和解锁操作,并要求遵循两阶段封锁协议。
T1T2Slock AR(A)Slock BR(B)Xlock BB=A+BW(B)Unlock BSlock BR(B)Unlock BUnlock ASlock AR(A)Xlock AA=A+BW(A)Unlock AUnlock AUnlock B (2)说明T1和T2的执行是否会引起死锁,给出T1和T2的一个调度并说明之。 会引起死锁。
T1T2Slock AR(A)Slock BR(B)Slock BR(B)Xlock B等待Slock A等待R(A)等待Xlock A…等待 总结:1.排他锁–写锁–X锁;共享锁–读锁–S锁 2.死锁:T1等待T2,T2等待T1.两个事务永远不能结束,形成死锁。 3.通过交换不冲突的操作得到新调度,如果新调度是串行的,称原调度是冲突可串行化调度。 4.如果一个调度是冲突可串行化,则一定是可串行化的调度。
完。