在做 6.824 的 lab2A,现在有个问题我搞了几天,一直没找到原因
下面这个方法,
执行的时候打印出了 line1 处的 DPrintf("follower rf %v voted for other!\n",
rf.me),
然后就卡住了,永远也打印不出 line2 的("-------------------------------rf %v ----for step %v end!!! \n\n\n",
rf.me, i)
有人有思路么?理论上,如果我已经走到了 line1,下一步不就是跳到 switch 语句外面的 line2 了么?
go func() {
i:=0
for {
i++
fmt.Printf("----------------------------------------------------------------rf %v ----for step %v start\n",
rf.me, i)
//...
switch state {
case FOLLOWER:
rf.resetElectionTimer()
select{
case <- rf.heartBeatCh:
DPrintf("follower rf %v heartbeat for other!\n",
rf.me)
rf.stopElectionTimer()
case <- rf.voteCh:
rf.stopElectionTimer()
DPrintf("follower rf %v voted for other!\n",
rf.me) //line1
case <- rf.electionTimer.C:
DPrintf("follower rf %v timeout change to candidate\n",
rf.me)
rf.changeState(CANDIDATE, term)
//rf.resetElectionTimer()
}
case CANDIDATE:
//...
}
case LEADER:
//...
}
//line2
fmt.Printf("-------------------------------rf %v ----for step %v end!!! \n\n\n",
rf.me, i)
}
}()
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/660713
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.