【问题标题】:Sequentially consistent but not linearizable execution顺序一致但不可线性化的执行
【发布时间】:2017-04-24 21:47:13
【问题描述】:

我试图了解线性化和顺序一致性之间的区别。更具体地说,我想要一个执行顺序一致但不可线性化的示例。 我的教授给了我以下这种处决的例子:

Alice and bob write checks to each other.
Alice’s Statement:
-10  Check Alice -> Bob
0  Check Bob -> Alice

Bob’s Statement
-10  Check Bob -> Alice
0  Check Alice -> Bob

Both overdraft.
It is sequential: each client sees a consistent order
It is not linearizable: no globally linear story 

但我没听懂。线

n Check A -> B

应该被解释为“操作为n后A向B及其帐户写入支票”。 我不明白为什么操作不应该是可线性化的:Alice 和 Bob 最终都以 0 结束,这是一个一致的值,所以也许我没有正确理解“线性化”的定义。

【问题讨论】:

  • 我不明白你给出的例子,但也许ecksit.wordpress.com/2015/09/07/… 很好地解释了这种差异。它帮助了我(我没有写答案,因为我对这些定义还不够确定)

标签: concurrency memory-model


【解决方案1】:

首先,你的教授给你的不是明确的历史/执行,而是历史在两个线程上的投影。

如果通过放弃挂起的调用和/或添加对挂起的调用的响应(您没有离开),历史 H 是线性化的,您可以获得与顺序历史 S 不相矛盾的历史H. 隐含的优先级。

换句话说,您的示例不能线性化的原因是操作(金融交易)不能被分配到单个时间点。先扣钱,后加钱,线程/个人银行对账单观察到这种行为。

如果银行对账单是

Alice’s Statement:
-10  Check Alice -> Bob
0  Check Bob -> Alice

Bob’s Statement
10  Check Alice -> Bob
0  Check Bob -> Alice

那么我们会有如下的历史S:

Alice: Send Bob 10
Alice: Send completed
Bob:   Send Alice 10
Bob:   Send completed

但在您的示例中,历史可能是

Alice: Send Bob 10 (i.e. money is gone)
Bob:   Send Alice 10 (i.e. money is gone)
Bob:   Send completed (i.e. money arrived)
Alice: Send completed (i.e. money arrived)

(或 1/2 行切换和 3/4 行切换的任意组合)并且您无法在不更改其间每个线程观察到的帐户余额的情况下按顺序重新排序(即成对开始/完成)。

【讨论】:

    猜你喜欢
    • 2017-12-25
    • 2013-10-13
    • 2018-12-21
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    • 2016-10-04
    • 1970-01-01
    相关资源
    最近更新 更多