我有一个问题是要求绘制一个矢量时钟时间线图来说明在事件关系之前发生的部分顺序。
以下是矢量时钟:
V(a) = (4,4,2)
V(b) = (4,2,2)
V(c) = (2,2,3)
V(d) = (4,3,2)
V(e) = (4,4,4)
V(f) = (3,2,2)
我不确定如何确定每个事件属于哪个进程。我使用的所有例子都是矢量时钟,其值从0开始,例如V(a)=(1,0,0)所以我假设事件a是第一个发生的事件,或者它与其他进程并发,但我不知道如何做这个特定的问题。
有人可以帮忙吗?
由于
答案 0 :(得分:5)
您正在寻找的是下图:
p1 ------- f(3,2,2)----------- b(4,2,2)------------ ------------------------
p2 --------------------------------- d(4,3,2)----- --- a(4,4,2)--------------
p3 -------- c(2,2,3)------------------------------ ------------- e(4,4,4)---
其中b - >之间也存在进程间通信。 d和a - > ë
为什么?
您会看到具有共同点的进程位于同一行,然后您可以在流程行中对其进行逻辑排序,因为该流程行没有任何变化。如果你为它们中的每一个执行此操作,那么将很容易绘制整个交互。
希望这是你所寻找的,虽然我认为这是一个相当古老的问题。 :d
答案 1 :(得分:0)
假设原始矢量时钟算法为described by Fidge,这组矢量时钟读数是不可能的。
首先,观察到存在一系列线性有序事件:f< b< d< a<即此链中的每个元素与下一个元素的区别仅在于一个时钟组件且仅为1.这意味着所有这些事件都发生在同一个进程中,因为否则来自链的一对事件必须通过消息路径连接(因为它们是有序的,因此,因果关系),但每个消息发送和接收改变了矢量时钟的2个组成部分(一次用于发送,一次用于接收)。
因此,来自链的所有事件都发生在同一个过程中,但是对应于该过程的时钟组件必须沿着链单调增加。矛盾。