📅  最后修改于: 2020-12-12 07:33:44             🧑  作者: Mango
序列化图用于测试计划的可序列化性。
假设有一个计划S。对于S,我们构造一个称为优先级图的图。此图具有一对G =(V,E),其中V包含一组顶点,E包含一组边。顶点集用于包含计划中的所有事务。一组边用于包含所有满足以下三个条件之一的Ti-> Tj边:
例如:
说明:
读(A):在T1中,没有后续写入A的操作,因此没有新的边
读(B):在T2中,没有后续向B的写操作,因此没有新的沿
读(C):在T3中,没有后续的对C的写操作,因此没有新的边沿
Write(B):随后由T3读取B,因此添加边T2→T3
Write(C): T1随后读取C,因此将边T3→T1相加
Write(A): A随后被T2读取,因此添加边T1→T2
Write(A):在T2中,没有后续读取A,因此没有新的边
Write(C):在T1中,没有后续读取C,因此没有新的边
Write(B):在T3中,没有后续读取B,因此没有新的边
计划S1的优先级图包含一个周期,这就是为什么计划S1无法序列化的原因。
说明:
读(A):在T4中,没有后续写入A的操作,因此没有新的边
读(C):在T4中,没有后续的对C的写操作,因此没有新的沿
Write(A):随后由T5读取A,因此添加边T4→T5
读(B):在T5中,没有后续写入B的操作,因此没有新的边
Write(C): T6随后读取C,因此添加边T4→T6
Write(B): A随后被T6读取,因此添加边T5→T6
Write(C):在T6中,没有后续读取C,因此没有新的边
Write(A):在T5中,没有后续读取A,因此没有新的边
Write(B):在T6中,没有后续读取B,因此没有新的边
计划S2的优先级图不包含任何循环,这就是为什么ScheduleS2可序列化的原因。