📜  门| GATE-CS-2017(Set 2)|第64章

📅  最后修改于: 2021-06-29 23:48:12             🧑  作者: Mango

两个事务T 1和T 2给出为:

T1: r1(X)w1(X)r1(Y)w1(Y)

T2 : r2(Y)w2(Y)r2(Z)w2(Z)

其中R I(V)表示由事务T i上进行变量V和W I(V)的读取操作表示在可变V.由事务T I A的写操作的冲突序列化调度的总数可以由T1来形成T2是______

注意:此问题显示为“数值答案类型”。
(A) 54
(B) 55
(C) 56
(D) 57答案: (A)
说明:为了使时间表可序列化,它们应避免RW,WW,WR冲突。
在冲突可序列化时间表中,我们必须看到,发生在同一数据项上的两个事务中的操作都不应冲突。数据项y在两个事务之间共享,因此T1中对数据项y的读写操作可能与数据T对事务T2的读写操作产生RW,WR,WW冲突。
另一个约束是应保持每个事务的操作顺序。我们无法更改交易的操作顺序。假设在T1中,如果read(x)在write(x)之前,则它应该以相同的顺序出现在导致冲突的可序列化调度中。
在T1中,我们有两个冲突的操作r1(y)和w1(y)
在T2中,我们有两个冲突的操作r2(y)和w2(y)
y上的T1的读和写都应该在T2的读/写对之前或在对T2的读/写对之后一起执行,因为将它们交织会导致不一致,因为这两个事务都在同一对象上执行操作。

因为(T1的最后一个操作和T2的第一个操作是相互冲突的),所以只有一种方式可以使(可冲突的)可序列化时间表为T1-> T2。现在,查看有多少个时间表可冲突化为T2-> T1。

T1-
      r1(x)      w1(x)         r1(y)         w1(y)   

现在从右看T2,如果从右看T2,则看到第一个冲突的操作
w2(z)和r2(z)与任何操作都没有冲突,但是w(y)有冲突
选择W2(y),看看它可以在多少个地方。

Case1:     w2(y)      r1(x)      w1(x)         r1(y)         w1(y)   
Case2:     r1(x)       w2(y)    w1(x)         r1(y)         w1(y)   
Case3:     r1(x)       w1(x)     w2(y)        r1(y)         w1(y) 

挑选每种情况,看看T2的其他操作可以占据多少位置。

情况1: w2(y) r1(x)w1(x)r1(y)w1(y)
w2(z)和r2(z)可以占据多少个位置?
(请注意,这些w2(z)和r2(z)不能早于w2(y) )
即5C1 + 5C2 = 15(两者都可以占用相同的空间或两个不同的空间)
现在看到,对于这15个位置中的每一个,r2(y)可以取多少?
显然,r2(y)不能比w2(y)早于一个位置。
15×1 =案例1中总共15个可能的时间表。

情况2: r1(x) w1(y) w1(x)r1(y)w1(y)
w2(z)和r2(z)可以占据多少个位置?
即4C1 + 4C2 = 10(两者都可以占用相同的空间或两个不同的空间)
现在看到,对于这10个位置中的每个位置,r2(y)可以取多少个?
仅2个位置,因为它必须在w1(y)之前。
10×2 =案例2中总共20个可能的时间表。

情况3: r1(x)w1(x) w2(y) r1(y)w1(y)
w2(z)和r2(x)可以占据多少个位置?
那就是3C1 + 3C2 = 6
现在看到,对于这6个位置中的每个,r2(y)可以取多少?
仅3个位置,因为它必须在w2(y)之前。
6×3 =案例3中总共18个可能的时间表。
可冲突序列化的总计划为T2-> T1 = 15 + 20 + 18 = 53。
可冲突序列化为T1-> T2 = 1的总计划。可冲突序列化为T2-> T1或T1-> T2 = 53 + 1 = 54的总计划。

该解决方案由Parul Sharma提供。这个问题的测验