首先了解冲突操作的概念:冲突操作是指不同的事务对同一个数据的读写操作和写写操作:

$R_i(x)$与$W_j(x)$ -----事务$T_i$读x,$T_j$写x,其中$i \neq j$
$W_i(x)$与$W_j(x)$ -----事务$T_i$写x,$T_j$写x,其中$i \neq j$

一个调度Sc在保证冲突操作的次序不变的情况下,通过交换两个事务不冲突操作的次序得到另一个调度$Sc_1$,如果$Sc_1$是可串行的,称调度Sc为冲突可串行化的调度若一个调度是冲突可串行化,则一定是可串行化的调度

例题:
今有调度$Sc=r_1(A)w_1(A)r_2(A)w_2(A)r_1(B)w_1(B)r_2(B)w_2(B)$, 判断该调度是否是冲突可串行化的。

这题的解法:
1.首先知道交换规则:

  • 同一个事务的任何两个操作不能交换
  • 不同事务对同一元素的两个写操作不能交换
  • 不同事务对同一元素的一读一写操作不能交换

2.当通过交换得到任何一个事务都是串行的,即是冲突可串行化的,否则不是。

解析:

1.首先可以把$w_2(A)$与$r_1(B)w_1(B)$交换,得到

$r_1(A)w_1(A)r_2(A)r_1(B)w_1(B)w_2(A)r_2(B)w_2(B)$

2.再把$r_2(A)$与$r_1(B)w_1(B)$交换

得到$Sc_2=r_1(A)w_1(A)r_1(B)w_1(B)r_2(A)w_2(A)r_2(B)w_2(B)$
$Sc_2$等价于一个串行调度$T_1$、$T_2$。所以$Sc_1$为冲突可串行化调度。

最后修改:2021 年 07 月 04 日 11 : 30 PM
如果觉得我的文章对你有用,请随意赞赏