package main import "fmt" type MsgType int type State struct { ReqMsgNum int PrepareMsgsNum int CommitMsgsNum int } const f = 1 var state State func prepared(state State) bool { /* *********** Begin ********** */ return state.PrepareMsgsNum >= state.ReqMsgNum/2+1 /* *********** End ********** */ } func committed(state State) bool { /* *********** Begin ********** */ return state.CommitMsgsNum >= state.ReqMsgNum/2+1 /* *********** End ********** */ } func main(){ state := State{} //读入现在的状态 fmt.Scanln(&state.ReqMsgNum) fmt.Scanln(&state.PrepareMsgsNum) fmt.Scanln(&state.CommitMsgsNum) //判断是否commit fmt.Print(committed(state)) }
时间: 2023-07-18 16:40:14 浏览: 89
这段代码与之前的代码几乎完全一样,只是在 prepared 和 committed 函数中添加了具体的判断条件,并将函数体注释掉了。prepared 函数用于判断是否满足准备条件,即已收到的准备消息数是否大于等于总请求消息数的一半加一;committed 函数用于判断是否满足提交条件,即已收到的提交消息数是否大于等于总请求消息数的一半加一。最后在 main 函数中读入现在的状态,并输出是否满足提交条件的结果。
以下是完整代码实现:
```go
package main
import "fmt"
type MsgType int
type State struct {
ReqMsgNum int
PrepareMsgsNum int
CommitMsgsNum int
}
const f = 1
func prepared(state State) bool {
return state.PrepareMsgsNum >= state.ReqMsgNum/2+1
}
func committed(state State) bool {
return state.CommitMsgsNum >= state.ReqMsgNum/2+1
}
func main() {
state := State{}
// 读入现在的状态
fmt.Scanln(&state.ReqMsgNum)
fmt.Scanln(&state.PrepareMsgsNum)
fmt.Scanln(&state.CommitMsgsNum)
// 判断是否 commit
fmt.Print(committed(state))
}
```
阅读全文