多个协程交替打印ABC
package main
import (
"fmt"
"sync"
)
var wg sync.WaitGroup
func main() {
Ach := make(chan int, 1)
Bch := make(chan int)
Cch := make(chan int)
wg.Add(3)
go fn("A", Ach, Bch)
go fn("B", Bch, Cch)
go fn("C", Cch, Ach)
wg.Wait()
close(Ach)
close(Bch)
close(Cch)
}
func fn(str string, ch1 chan int, ch2 chan int) {
defer wg.Done()
for i := 0; i < 10; i++ {
ch1 <- 1
fmt.Println(str, i+1)
<-ch2
}
}
注意:A协程是带缓冲的,否则会导致死锁