package main
import (
"fmt"
"sync"
)
func main() {
//这⾥⽤到了两个 channel 负责通知,letter负责通知打印字⺟的goroutine来打印字⺟,number⽤来通知打印数字
//的goroutine打印数字。
letter, number := make(chan bool), make(chan bool)
wait := sync.WaitGroup{}
go func() {
i := 1
for {
select {
case <-number:
fmt.Print(i)
i++
fmt.Print(i)
i++
letter <- true
}
}
}()
wait.Add(1) //设置wait协程的个数,然后创建worker协程
go func(wait *sync.WaitGroup) {
i := 'A'
for {
select {
case <-letter:
if i >= 'Z' {
wait.Done() //wait协程执行结束以后,都要调用 wait.Done()
return
}
fmt.Print(string(i))
i++
fmt.Print(string(i))
i++
number <- true
}
}
}(&wait)
number <- true
wait.Wait() //main协程调用wait.Wait()且被block,直到所有wait协程全部执行结束后返回
fmt.Println("\n")
fmt.Print("main is run")
}
交替打印数字和字⺟(goroutine和channel简单使用)
于 2022-05-20 17:04:29 首次发布