望望丫 level
获赞
4
粉丝
0
关注
0
看过 TA
12
九江学院
2024
golang
IP属地:上海
暂未填写个人简介
私信
关注
2023-10-08 21:13
九江学院 golang
func main() { c1 := make(chan int) c2 := make(chan int) var wg sync.WaitGroup for i := 0; i < 10; i++ { wg.Add(1) go func(int2 int) { <-c1 fmt.Println(int2) <-c2 wg.Done() }(i) time.Sleep(time.Second / 60) } for i := 0; i < 10; i++ { c1 <- i c2 <- i } wg.Wait() } /* 实际输出 0 1 2 3 4 ...
27933:第一个for循环,因为你加入了时延阻塞会依次把10个goroutine加入到c1的读等待队列。第二个for循环会向c1塞入值会依次唤醒c1读等待队列中的goroutine。虽然是依次唤醒goroutine,但是打印的时候调度不是有顺序的,所以需要c2控制,保证前一个goroutine打印完毕才能继续向c1塞入值唤醒下一个goroutine。可以把c2给注释了,再在第二个for循环后加入时延保证goroutine依次打印也可以做到相同的效果。
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客网在线编程
牛客网题解
牛客企业服务