利用OSTM实现可组合性的高效方法
1. 历史完成与顺序历史定义
首先,对于历史 H,我们通过在每个处于活动状态的事务 Tk 的最后一个方法之后立即插入 tryAk(A ) 来构造 H 的完成形式,记为 H。由于顺序历史中的所有方法都是完整的,这个定义主要关注已完成的事务。
在顺序历史 H 中,设 mij(ht, k, v/NULL) 为事务 Ti 在 H 中对键 k 操作的第一个方法,记为 H.firstKeyMth(⟨ht, k⟩, Ti)。对于不是 Ti 在 ⟨ht, k⟩ 上的第一个方法的 mix(ht, k, v),我们将其在 k 上的前一个方法记为 mij(ht, k, v) = H.prevKeyMth(mix, Ti)。
历史 H 中的事件通过 <H 进行排序。对于 methods(H) 中的两个完整方法 mij 和 mpq,如果 rsp(mij) <H inv(mpq),则记为 mij ≺MRH mpq,这里 MR 代表方法实时顺序。同样,对于 term(H) 中的两个事务 Ti 和 Tp,如果 Ti.lastEvt <H Tp.firstEvt,则记为 (Ti ≺TRH Tp),这里 TR 代表事务实时顺序。
如果历史 H 中的所有事务都已终止,并且可以根据 ≺TR 进行全序排序,即所有事务依次执行,没有交错,那么我们称 H 为串行历史。形式上,⟨(H 是串行的) =⇒ (∀Ti ∈ txns(H) : (Ti ∈ term(H)) ∧ (∀Ti, Tp ∈ txns(H) : (Ti ≺TRH Tp) ∨ (Tp ≺TRH Ti))⟩。由于事务内的所有方法都是有序的,所以串行历史也是顺序历史。
超级会员免费看
订阅专栏 解锁全文
1625

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



