1 回答
TA贡献1784条经验 获得超2个赞
如果你在不同的 goroutines 中运行这些函数,我会建议双通道。这就像传递一个小布尔球。每个函数都有一个他们监听的通道,以及另一个通道,一旦关键部分完成,他们就会将球传给另一个通道。那么您可以确定,无论何时调用它们,它们始终会交替运行。
此模式还允许您使用 f3、f4 ... 扩展循环。
package main
func f1(do chan bool, next chan bool) {
//... some code
<-do // Waits for the ball
// critical section 1 (CS1)
//... critical section code
// end criticla section 1
next <- true // Pass on the ball to the next function
//... more code
}
func f2(do chan bool, next chan bool) {
//... some code
<-do
// critical section 2 (CS2)
//... critical section code
// end criticla section 2
next <- true
//... more code
}
func main() {
cf1 := make(chan bool, 1)
cf2 := make(chan bool, 1)
cf1 <- true // Let cf1 start with the ball
go f1(cf1, cf2)
go f2(cf2, cf1)
// Wait here, otherwise it will just exit
}
- 1 回答
- 0 关注
- 202 浏览
添加回答
举报