问答题 如图所示给出的是一个调度的事件序列。该调度包含T1,T2,…,T2等12个事务,A,B,…,H为数据库中的数据项,假定“读i”(i=A,B,…,H)成功,则获得i上的一个S锁,而“修改i”成功时,则将锁升级为X锁。又假定所有锁都保持到事务结束,那么,在时刻t36是否存在死锁?并分析哪些事务处于等待另一个事务的状态。
时间 事务 操作 时间 事务 操作
t1 T1 读A t19 T9 修改G
t2 T2 读B t0 T8 读E
t3 T1 读C t1 T7 COMMIT
t4 T4 读D t2 T9 读H
t5 T5 读A t3 T3 读G
t6 T2 读E t4 T10 读A
t7 T2 修改E t5 T9 修改H
t8 T3 读F t6 T6 COMMIT
t9 T2 读F t27 T11 读C
t10 T5 修改A t28 T12 读D
t11 T1 COMMIT t29 T12 读C
t12 T6 读A t30 T2 修改F
t13 T5 ROLLBACK t31 T11 修改C
t14 T6 读C t32 T12 读A
t15 T6 修改C t33 T10 修改A
t16 T7 读G t34 T12 修改D
t17 T8 读H t35 T4 读G
t18 T9 读G t36 1 1
一个调度的事件序列
【正确答案】在时刻t36存在事务T2,T3,T9和T8死锁,另外,事务T4等待事务T9,事务T12 等待事务T4,事务T11,T10等待事务T12。
【答案解析】