逻辑时钟

定义happen before关系->满足如下条件:

  1. 事件a和b在同一个进程中发生,a在b之前发生,那么a -> b
  2. 事件a是发送信息,事件b是接收该信息,那么a -> b
  3. a -> b并且b -> c,那么a -> c ,传递性
  4. 如果a 不happen before b,b也不happen before a,则 a,b是并发的

 

定义Ci作为进程Pi的时钟,Ci(a)用来给事件a产生一个数字,代表事件的时间。

 

定义C作为系统的时钟,如果事件b属于进程Pi,那么C(b)=Ci(b),

每个进程都认为自己的时钟是正确的?

 

逻辑时钟约束:如果a -> b,那么C(a) < C(b)。如果a happen before b,则系统时间存在C(a) < C(b)的关系

实现方式:

 

为了实现逻辑时钟,假设每个进程i有个变量Ci,用来产生事件的时间。Ci按如下规则变化:

  1. 每个进程i在节点内事件发生时将Ci递增
  2. 假设事件a是进程i发送消息m的事件,m需要携带时间戳t=Ci(a);进程j接收到m之后,将Cj设置为比t大并且不小于Cj当前值的值 (存在网络延迟的情况,本地时钟可能已经更新)

 

发送方递增,接收方更新自己的时间

 

 

 

有了逻辑时钟,我们可以定义所有事件的全序关系了。注意,因为存在两个事件的逻辑时钟一致的情况,所以这里在先任意的选择一个进程全序关系<-,例如我们可以将进程编号的大小关系作为<-。

进程i中的事件a和进程j中的事件b的全序关系=>定义为满足如下任意条件时,a=>b:

  1. Ci(a) < Cj(b)
  2. Ci(a) = Cj(b) 并且 Pi <- Pj

 

Pi,Pj存在某种人为定义的关系即可。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值