Go 协调goroutines
示例
想象一下一个具有两步过程的goroutine,其中主线程需要在每一步之间做一些工作:
func main() {ch := make(chan struct{})
go func() {
// 等待主线程的信号开始第一步
<-ch
// 执行工作
time.Sleep(1 * time.Second)
// 向主线程发出第一步已完成的信号
ch <- struct{}{}
// 等待主线程的信号开始第二步
<-ch
// 执行工作
time.Sleep(1 * time.Second)
// 向主线程发出工作已完成的信号
ch <- struct{}{}
}()
// 通知goroutine第一步可以开始
ch <- struct{}{}
// 等待goroutine通知第一步已完成
<-ch
// 在通知之前执行一些工作
// 第二步可以开始的程序
time.Sleep(1 * time.Second)
// 通知goroutine第二步可以开始
ch <- struct{}{}
// 等待goroutine通知第二步已完成
<-ch
}
以上是 Go 协调goroutines 的全部内容, 来源链接: utcz.com/z/315766.html