Multithreading 线性化与串行化

Multithreading 线性化与串行化,multithreading,concurrency,shared-memory,consistency,Multithreading,Concurrency,Shared Memory,Consistency,从我的经验来看,我明白这一点 线性化和顺序一致性适用于单个对象上的单个操作 可序列化性和严格可序列化性适用于多个对象上的多个操作 单个对象上的单个操作是否意味着以下内容 顺序1: T1: 读(X)写(X) T2: 写(X)读(X) 鉴于多个操作和多个对象意味着: 顺序2: T1: 读(Y)写(X)读(Y) T2: 写入(Y)读取(X)写入(Y) 这是否也意味着: 序列2可以解释函数(或java中的方法)的执行情况吗 序列1只能对函数中同一对象上的操作子集进行推理 首先,请注意,根据给定的一致

从我的经验来看,我明白这一点

  • 线性化和顺序一致性适用于单个对象上的单个操作
  • 可序列化性和严格可序列化性适用于多个对象上的多个操作
单个对象上的单个操作是否意味着以下内容

顺序1:

T1: 读(X)写(X)

T2: 写(X)读(X)

鉴于多个操作和多个对象意味着:

顺序2:

T1: 读(Y)写(X)读(Y)

T2: 写入(Y)读取(X)写入(Y)

这是否也意味着:

  • 序列2可以解释函数(或java中的方法)的执行情况吗
  • 序列1只能对函数中同一对象上的操作子集进行推理

  • 首先,请注意,根据给定的一致性模型,如线性化或序列化,一致性历史被定义为满足操作点(或方法)调用对象顺序规范的历史[1,2]

    更具体地说:

    对象的顺序规范只是对象的一组顺序历史记录

    其中历史定义为:

    方法调用和响应事件的有限序列

    其中一对调用和响应事件形成一个方法调用,即:

    历史H中的方法调用是一对,由H中的调用和下一个匹配响应组成

    因此,事实上,线性化是为单个对象上的单个操作定义的,但该定义也可以涵盖多个对象上的历史[1,2]。另一方面,可序列化性本质上涵盖了对多个对象执行多个操作的历史,因为它(通常)是在事务处理上下文中定义的,其中每个事务可能涉及对多个对象执行多个操作

    这两种操作,即单个对象上的单个操作和多个对象上的多个操作,可以通过定义对象上的方法(可能统一多个对象)来实现等效,这些方法定义了适当的顺序规范,其中整个事务被视为某些对象上的方法(例如,一个简单的例子是队列入/出队列[1])。这反过来定义了此类对象的顺序规范,从而根据给定的一致性模型定义了有效的历史记录

    现在,如果T1和T2被解释为线程,那么实际上,序列1调用单个对象上的操作,而序列2显然调用多个操作和多个对象。请注意,在这两种情况下,可以检查历史的线性化和序列化性,而读写操作可能被分组为into如前所述的“语义”原子方法

    根据可线性化和可串行化之间的关系,可串行化是严格较弱的一致性模型,在该模型中,有效历史可能等价于任意序列中方法的执行,而可线性化可以被视为等价于严格可串行化(如果我们将事务视为单个对象的方法)。请注意,一些作者开始在事务上下文中使用线性化功能[3]


    [1] .作者:Nir Shavit和M p.Herlihy

    [2] 作者:M p.Herlihy和J M.Wing.ACM编程语言和系统学报,第12卷,第3期,1990年7月


    [3] Nir Shavit和Dan Touitou.Distrib.Compute.(1997)10:99-116.

    首先,请注意,根据给定的一致性模型,如线性化或串行化,一致性历史被定义为满足对象关于操作点(或方法)调用的顺序规范的历史[1,2]

    更具体地说:

    对象的顺序规范只是对象的一组顺序历史记录

    其中历史定义为:

    方法调用和响应事件的有限序列

    其中一对调用和响应事件形成一个方法调用,即:

    历史H中的方法调用是一对,由H中的调用和下一个匹配响应组成

    因此,事实上,线性化是为单个对象上的单个操作定义的,但该定义也可以涵盖多个对象上的历史[1,2]。另一方面,串行化本质上涵盖了多个对象上具有多个操作的历史,因为它(通常)在事务处理上下文中定义,其中每个事务可以涉及多个对象上的多个操作

    这两种操作,即单个对象上的单个操作和多个对象上的多个操作,可以通过定义对象上的方法(可能统一多个对象)来实现等效,这些方法定义了适当的顺序规范,其中整个事务被视为某些对象上的方法(例如,一个简单的例子是队列入/出队列[1])。这反过来定义了此类对象的顺序规范,从而根据给定的一致性模型定义了有效的历史记录

    现在,如果T1和T2被解释为线程,那么实际上,序列1调用单个对象上的操作,而序列2显然调用多个操作和多个对象。请注意,在这两种情况下,可以检查历史的线性化和序列化性,而读写操作可能被分组为into如前所述的“语义”原子方法

    根据可线性化和可串行化之间的关系,可串行化是严格较弱的一致性模型,在该模型中,有效历史可能等价于任意序列中方法的执行,而可线性化可以被视为等价于严格可串行化(如果我们将事务视为单个对象的方法)。请注意,有些作者开始使用l