数据库系统原理———两段锁协议、死锁练习题

    技术2026-03-16  4

    一、题目描述

    14.考虑T和T2两个事务。 T1: R(A); R(B);B=A+ B; W(B) T2: R(B); R(A);A=A+ B; W(A) (1)改写T和T2, 增加加锁操作和解锁操作,并要求遵循两阶段封锁协议。 (2)说明T和T2的执行是否会引起死锁,给出T和T2的一个调度并说明之。

    二、问题解答

    (1)如下表所示

    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)如下调度会引起死锁:

    T1T2Slock AR(A)Slock BR(B)SlockBR(B)Xlock B等待Slock A等待R(A)等待Xclock A等待

    ps: 死锁的定义:如果事务T1封锁了数据R,T2封锁了数据R2,然后T1又请求封锁R2,因T2已封锁了R2, 于是T1等待T2释放R2上的锁:接着T2又申请封锁R,因T1已封锁了R1, T2也只能等待T1释放R上的锁。这样就出现了T1在等待T2,而T2又在等待T1的局面,T1和T2两个事务永远不能结束,形成死锁。

    Processed: 0.009, SQL: 9