本程序基于github:logic clock的代码,增加了论文中Ordering the Events Totally的算法代码
一、github:logic clock介绍
- 此示例中用3个进程模拟分布式系统,用csv日志记录
- 将逻辑时钟应用于生产者消费者模式中
- 通过随机数模拟不同进程的不同时钟速率
- 进程发送的消息加上了发送时的逻辑时间戳
- 进程接收到消息后将其放入自己的请求队列中,更新逻辑时钟
更新逻辑:logic_clock = max(logic_clock, msg_T + 1)
二、我们的实现
论文分析
- 发送申请资源的request请求时,需要发送给除了自己之外的所有进程,并将请求放进自己的消息队列中
- 收到request请求时,将请求放进自己的消息队列中,发回ack
- 释放资源时,进程将自己消息队列中的队首元素移除,并向除了自己之外的所有进程发送release消息
- 收到release消息时,将消息队列中的队首元素移除
- 在收到release请求和ack请求后,判断是否可以使用资源,条件有两条:(1)在请求队列中,自己的请求是全序最先的(2)收到了所有其他人的ack
增加的逻辑
- 收到ack和release消息时都判断是否可以使用资源
- 当请求队列中自己在队首时,不论有没有使用资源,出队前都发送一个release消息
- 应用逻辑时钟,消息打上时间戳,每当收到一个消息都更新自己的逻辑时钟