线性协作对象同步问题的解决方案
在协作编辑系统中,多个用户可能同时对同一对象进行操作,为了确保所有用户最终看到的对象状态一致,需要解决操作冲突和收敛问题。本文将探讨线性协作对象同步的相关问题,并介绍一种新的解决方案。
问题分析
在协作编辑过程中,存在一些难以满足的条件,其中 C2 条件尤为棘手。例如,有三个并发操作: op1 = Ins(3, x) 、 op2 = Del(2) 和 op3 = Ins(2, y) ,初始时 Pos(op1) > Pos(op3) 。根据定义, op1 和 op3 并不冲突。但在操作转换过程中,当 op1 沿着序列 S1 = [op2; op′3] 进行转换时, Pos(T(op1, op2)) = Pos(op′3) ,这导致 op1 和 op3 之间的原始位置关系无法保持。
操作转换过程可能会使两个原本插入位置不同的并发插入操作陷入虚假冲突,即具有相同的插入位置。由于与其他操作的转换,这些操作位置之间的原始关系丢失,从而可能导致发散问题。因此,为了避免发散,我们需要了解插入操作的生成方式。
解决方案
为了解决上述问题,我们提出了一种新的方法,核心思想是在每个转换步骤中存储先前的插入位置,以恢复两个插入操作之间的原始位置关系。
超级会员免费看
订阅专栏 解锁全文
1067

被折叠的 条评论
为什么被折叠?



