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

 

posted @ 2025-03-09 13:06  刘宏缔的架构森林  阅读(46)  评论(0)    收藏  举报