golang用两个协程并发打印 1,a,2,b,3,c, ... z

// 用两个channel来实现阻塞,需要注意的就是最后输出需要考虑其中一个channel已关闭,不能再次触发阻塞

a := []int{1, 2, 3, 4, 5}
b := []string{"a", "b", "c", "d", "e"}

var wg sync.WaitGroup
// 两个chan
ch1 := make(chan struct{})
ch2 := make(chan struct{})

wg.Add(2)

go func() {
    defer wg.Done()
    for _, v := range a {
        <-ch1
        fmt.Println(v)
        ch2 <- struct{}{}
    }
}()

go func() {
    defer wg.Done()
    for i, v := range b {
        <-ch2
        fmt.Println(v)
        if i != len(b)-1 {
            ch1 <- struct{}{}
        }
    }
}()

ch1 <- struct{}{}
wg.Wait()

评论

(= ̄ω ̄=)··· 暂无内容!

回复

邮箱