go并发:用channel控制协程执行顺序
一,代码:
// 入口函数
func main() {
ch:=make(chan int,1)
go func() {
<-ch
for i:=1; i<=5; i++ {
time.Sleep(time.Millisecond)
fmt.Println(i)
}
}()
go func() {
for i:=1; i<=5; i++ {
time.Sleep(time.Millisecond)
fmt.Println(i*10)
}
ch <- 0
}()
time.Sleep(time.Second)
}
二,说明:
第一个协程开始处,用<-ch尝试从channel获取元素
第二个协程的最后,用ch<-0向channel写入元素
在第二个协程执行结束之前,第一个协程一定会被阻塞
三,运行效果:
控制顺序后
$ go run main.go
10
20
30
40
50
1
2
3
4
5
未控制顺序:
$ go run main.go
1
10
20
2
3
30
40
4
5
50
浙公网安备 33010602011771号