习题7.6.2
a)b)
a)第一步,T1为类外延加IS锁,为块B2加IS锁,,为对象O5加S锁;(T1—IS(C); T1—IS(B2); sl1(O5); r1(O5);)
第二步,T2—IX(C); T2—IX(B2); xl2(O5) Denied!
第三步:T1—IX(C); T1—IX(B2); xl1(O4); w1(O4); u1(O4); u1(O5); 第四步:xl2(O5); w2(O5);
第五步:T2—IS(C); T2—IS(B2); sl2(O3); r2(O3); u2(O3); u2(O5); b)第一步,T1—IS(C); T1—IS(B1); sl1(O1); r1(O1);
第二步,T1—IS(C); T1—IS(B2); sl1(O3); r1(O3); u1(O3); u1(O1); 第三步:T2—IS(C); T2—IS(B1); sl2(O1); r2(O1); 第四步:T2—IX(C); T2—IX(B2); xl2(O4); w2(O4);
第五步:T2—IX(C); T2—IX(B2); xl2(O5); w2(O5);u2(O5); u2(O4); 习题7.7.2
a)可以有两种方式进行交错。 r1(A);r1(B);r1(E);r3(B);r3(E);r3(F); r1(A);r3(B);r3(E);r3(F);r1(B);r1(E); b)只有一种方式进行交错。
r2(A);r2(C);r2(B);r3(B);r3(E);r3(F);
习题7.9.1
a)T1最先进行有效性确认,此时没有其他已确认事务,因而什么都不需要检测,T1的有效性成功确认并为数据库元素A写入一个值;
之后是T2的有效性确认,当确认T2有效性时,T1已经验证成功但尚未完成。所以必须检测T2的读写集合是否都满足与WS(T1) = {A}没有公共元素。由于RS(T2) = {B,C},WS(T2) = {B},两个都检测成功,因而确认T2的有效性。
最后是T3有效性确认,当确认T3有效性时,T1、T2已经验证成功但都尚未完成。所以必须检测T3的读写集合是否都满足与WS(T1) = {A}、WS(T2) = {B}没有公共元素。由于RS(T3) = {C},WS(T3) = {C},全都检测成功,因而确认T3的有效性。
b)T1最先进行有效性确认,此时没有其他已确认事务,因而什么都不需要检测,T1的有效性成功确认并为数据库元素A写入一个值;
之后是T2的有效性确认,当确认T2有效性时,T1已经验证成功但尚未完成。所以必须检测T2的读写集合是否都满足与WS(T1) = {C}没有公共元素。由于RS(T2) = {B,C},WS(T2) = {B},WS(T1) ∩ RS(T2) = {C},T2的有效性不能确认。T2被回滚。
最后是T3有效性确认,当确认T3有效性时,T1已经验证成功但尚未完成。所以必须检测T3的读写集合是否都满足与WS(T1) = {C}没有公共元素。由于RS(T3) = {C},WS(T3) = {A},WS(T1) ∩ RS(T3) = {C},T3的有效性不能确认。T3被回滚。