来自this,我理解
单个对象上的单个操作是否意味着以下内容?
序列1:
T1: 读(X)写(X)
T2: 写(X)读(X)
而多个操作和多个对象意味着:
序列2:
T1: 读(Y)写(X)读(Y)
T2: 写(Y)读(X)写(Y)
这是否也意味着:
答案 0 :(得分:0)
首先,请注意,根据给定的一致性模型(例如线性化或可串行化),一致的历史被定义为满足对象的顺序规范的历史。操作点(或方法)调用[1,2]。
更具体地说:
对象的顺序规范只是对象的一组连续历史记录
其中历史记录定义为:
方法调用和响应事件的有限序列
其中一对调用和响应事件形成一个方法调用,即:
历史记录中的方法调用H是由H
中的调用和下一个匹配响应组成的对
因此,实际上,线性化是针对单个对象的单个操作定义的,但是定义也可以涵盖多个对象的历史[1,2]。另一方面,可序列化涵盖了在多个对象上具有多个操作的历史记录,因为它(通常)在事务处理的上下文中定义,其中每个事务可能涉及对多个对象的多个操作。
这两个,即单个对象上的单个操作和多个对象上的多个操作,可以通过定义对象(可能统一多个对象)定义适当的顺序规范来实现对等事务被视为某些对象的方法(例如,一个简单的例子是queue enqueue / dequeue [1])。反过来,这定义了这些对象的顺序规范,因此根据给定的一致性模型定义了有效的历史。
现在,如果将T1和T2解释为线程,那么实际上,序列1会调用单个对象上的操作,而序列2则会明确调用多个操作和多个对象。请注意,在这两种情况下,可以根据线性化和可串行性检查历史记录,而读取和写入操作可以分组为“语义”原子方法,如前所述。
根据线性化和可串行化之间的关系,可序列化是严格较弱的一致性模型,其中有效历史可能等同于任意序列中方法的执行,而线性化可视为等同于严格可序列化(如果我们将事务视为方法单个对象)。请注意,一些作者开始在事务上下文中使用线性化[3]。
[1] The Art of Multiprocessor Programming。作者:Nir Shavit和M P. Herlihy
[2] Linearizability: A Correctness Condition for Concurrent Objects。作者:M P. Herlihy和J M. Wing。 ACM Programming on Programming Languages and Systems,Vol。 1990年7月12日第3期。
[3] Software Transactional Memory。 Nir Shavit和Dan Touitou。 DISTRIB。 COMPUT。 (1997)10:99-116。