2
如果事务永远不会跨越多个对象,那么每个对象的乐观并发性是否意味着可串行化?
给定一个提供以下功能的系统: 每个对象的乐观并发控制/版本控制(使用CAS-Check-and-Set) 不需要跨多个对象的事务。 快照隔离 该系统是否可序列化? 从快照隔离 在写偏斜异常中,两个事务(T1和T2)同时读取重叠的数据集(例如值V1和V2),并发进行不相交的更新(例如T1更新V1,T2更新V2),最后并发提交,都没有看到对方执行的更新。如果系统可序列化,那么这种异常将是不可能的,因为T1或T2都必须“首先”发生,而另一个则可见。相反,快照隔离允许写偏斜异常。 举一个具体的例子,假设V1和V2是一个人Phil持有的两个天平。银行将允许V1或V2出现赤字,前提是两者中所持的总和决不为负(即V1 + V2≥0)。目前两个余额均为$ 100。Phil同时发起了两个交易,T1从V1提取200美元,T2从V2提取200美元。 基于此,似乎存在写偏斜的可能性是保证快照隔离不可序列化的系统的唯一原因。 但是,在不允许事务跨越多个对象的系统中(在上面的示例V1和V2中),似乎不可能发生写偏斜。 因此,上述系统是可序列化的。它是否正确?