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
}
热门推荐
1 如何训练狗狗握手
10 新员工寄语祝福语简短
11 新婚敬酒祝福语大全简短
12 怎么训练狗狗
13 训练狗狗上厕所
14 春蚕老师祝福语简短励志
15 高考好运如愿祝福语简短
16 战哥过年祝福语简短
17 中考感谢朋友祝福语简短
18 长沙旅游祝福语大全简短