📜  门| GATE-CS-2017(套装2)|第 64 题

📅  最后修改于: 2021-09-26 03:10:00             🧑  作者: 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 是______

注意:此问题显示为数字答案类型。
(一) 54
(乙) 55
(三) 56
(四) 57答案:(一)
说明:对于冲突可序列化的调度,它们应该没有 RW、WW、WR 冲突。
在冲突可序列化调度中,我们必须看到发生在同一数据项上的两个事务中的操作不应发生冲突。数据项 y 在两个事务之间共享,因此 T1 中对数据项 y 的读写操作会与事务 T2 对数据项 y 的读写操作产生 RW、WR、WW 冲突。
另一个限制是应该保持每个事务的操作顺序。我们不能改变事务的操作顺序。假设如果 read(x) 在 T1 中的 write(x) 之前,那么它应该在导致冲突可序列化调度中的顺序相同。
在 T1 中,我们有两个相互冲突的操作 r1(y) 和 w1(y)
在 T2 中,我们有两个相互冲突的操作 r2(y) 和 w2(y)
T1 对 y 的读写应该在 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 提供。这个问题的测验