实用自稳定向量时钟算法解析
1. 向量时钟查询计算
在分布式系统中,向量时钟用于记录事件之间的因果关系。对于处理器 $p_i$ 在状态 $c_x$ 和 $c_y$($c_x$ 先于 $c_y$)之间发生的事件,设 $local^k_i$ 为状态 $c_k$ 下 $local_i$ 的值。若在 $c_x$ 和 $c_y$ 之间 $p_i$ 有两次或更多次恢复 $local_i$ 的步骤,则 $local^x_i$ 和 $local^y_i$ 之间不存在枢轴。
查询 $V^y_i[i] - V^x_i[i]$ 的响应如下:
- 若 $local^x_i$ 和 $local^y_i$ 仅在字段 $curr.m$ 上不同,则响应为 $VC(local^y_i)[i] - VC(local^x_i)[i]$。
- 若 $local^x_i.curr =_{\ell,o} local^y_i.prev$,则响应为 $newEvents(local^y_i, local^y_i.prev)[i]$。
- 否则,响应为 $\perp$。
查询 $causalPrecedence(Z, Z’)$ 的计算方式为:$causalPrecedence(Z, Z’) \Leftrightarrow existsPivot(Z, Z’) \land (\forall i \in {1, …, N} newEvents(Z, pivot)[i] \leq newEvents(Z’, pivot)[i] \land \exists j \in {1, …, N} newEvents(Z, pivot)[j] < newEvents(Z’, pivot)[j])$。