这可序列化吗?

时间:2013-05-27 22:32:58

标签: database transactions

write(T1, balx), read(T2, balx), write(T1, balx), commit(T2), abort(T1)

我正在修改考试,这是我在模拟试卷上一直在查看的问题之一。

根据标记方案,答案是交易是可序列化的。但我只是不明白如何。

当T1指向T2时,T1和T2陷入一个周期,然后在优先图中指向T1,因此不能将其序列化。标记是错误的还是我错过了什么?

1 个答案:

答案 0 :(得分:1)

我认为关键是 T1 abort 。如果在事务提交之前我没有错,那么可以安全地假设磁盘没有被修改。这意味着当T1中止数据库的状态时,因为这个操作顺序是相同的。这就是T2正在观看。

因此,如果我们有

write(T1, balx), write(T1, balx), abort(T1), read(T2, balx), commit(T2)
read(T2, balx), commit(T2), write(T1, balx), write(T1, balx), abort(T1)

然后,数据库和事务T2的状态将与示例中的状态相同。现在,如果T1已经提交,那么通过唤起优先级图表将是正确的。