我是“并发”的新手。 “事务”,我对乐观并发控制中的后向/前向验证感到有些困惑。只需对示例进行反向验证。假设Tv是正在验证的事务,而Ti是已提交的事务。我想知道为什么我们只检查电视的读取设置vs.Ti的写入集。为什么我们不检查Tv的写集vsTi的写集和Tv的写集vsTi的读集呢?由于写 - 写和写 - 读也是冲突操作...任何解释都将不胜感激!
答案 0 :(得分:2)
验证使用读取 - 写入冲突规则来确保特定事务的调度与所有重叠转换等效。这意味着一旦进入验证阶段,就无法对读取 / 写入集进行更改。
任何两个交易T i 和T j 需要满足3个规则,其中i <1。 j(T i 在T j 之前进入验证阶段):
T i 不得读取由T j
T j 不得读取由T i
T i 不得写入由T j 编写的对象 T j 不得写入由T i
向后验证假设在T j 的验证开始之前执行了T i 的所有读取操作。这意味着T i 已经处于验证阶段。 (满足规则1)
在验证T j 期间,对 write 设置的T检查读 T j 集<子> I 子>。如果没有重叠,则(满足规则2)。
如果满足规则1和规则2,则隐含地满足规则3。所有提交的更改将按顺序完成,因为T i 在T j 之前进入验证阶段。 T i 的 write 集将在T j 的 write 设置之前被验证和提交。
答案 1 :(得分:-1)
电视的反向验证:
转发验证电视:
将Tv的写集与所有重叠的读集进行比较 活跃交易;
与向后验证不同,在前向验证中 是中止哪个交易的选择(电视或任何一个 冲突的活跃交易);