在做 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)
}
}()
下面这个方法,
执行的时候打印出了 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)
}
}()