分布式系统:Raft(实验作业2B)

本文详细介绍了6.824 Lab 2B关于Raft分布式一致性协议的实践,重点讨论了如何处理commitIndex的计算,条件变量的使用以及实验中的注意事项。内容涵盖了同步机制、commitIndex更新逻辑以及在并发环境中的挑战,同时分享了调试过程中增加的详细日志以辅助理解程序流程。
摘要由CSDN通过智能技术生成

6.824 Raft Lab2B

实验做什么?

  • 上回L ab 2A做的是leader election
  • 而这次的Lab 2B主要做的是log replication
  • 程序结构只增加一个go程。这个go程循环检查commitIndex是否大于lastApplied。也就是说,检查有没有新近被commit的log项。如果有,就lastApplied++,然后向applyCh发送ApplyMsg消息。
  • 因为向chan发消息可能会阻塞。课程指南教大家用sync.Cond解决。sync.Cond是条件变量,在操作系统课程里都有讲,一般是和管程(monitor)一起介绍的。

条件变量

  • 条件变量的作用是当你持有一个锁(Mutex)时,你还想要等待一个条件成立。而这个条件的改变需要另外一个线程执行(这个线程它同样想持有这个锁)。所以,条件变量的Wait()方法会释放锁(Mutex)然后睡觉等通知,让其他线程可以进入临界区。然后其他线程觉得条件可能满足了,它就调用Broadcast()方法,通知睡觉的进程醒来,检查一下条件是否成立了。因为醒来的时候条件未必成立,所以检查和Wait()要搞成一个循环:
for !condition {
   
	c
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值