考虑以下事务 T1、T2、T3、T4 的调度 S:
以下哪一项陈述是正确的?
(A) S 是可冲突序列化但不可恢复的
(B) S 不可冲突序列化但可恢复
(C) S 既可冲突序列化又可恢复
(D) S 既不是冲突可序列化的,也不是可恢复的答案: (C)
说明:要检查冲突可序列化,我们需要制作一个优先图,如果该图包含一个循环,则它不是冲突可序列化的,否则是。
这里,对于优先级图,将只有两条有向边,一条来自 T2 -> T3(读写冲突),另一个来自 T2 -> T1(读写冲突),因此没有循环,因此调度冲突可序列化。
现在要检查可恢复性,我们需要检查任何一对操作之间的脏读操作(由事务 Ti 写入,然后由事务 Tj 读取,但在 Ti 提交之前)。如果没有脏读那么可恢复的计划,如果有脏读,那么我们需要检查提交操作。
这里没有脏读操作(因为 T3 和 T1 在 T4 读取 T3 和 T1 的 Write(X) 之前提交,而 T2 在 T4 读取 T2 的 Write(Y) 之前提交)。因此时间表是可恢复的。
因此,选项C。这个问题的测验