3. 如何控制协程执行顺序
func main() {
wg := &sync.WaitGroup{}
numChan := make(chan struct{}, 1)
byteChan := make(chan struct{}, 1)
wg.Add(2)
numChan <- struct{}{}
go numPrint(wg, numChan, byteChan)
go bytePrint(wg, numChan, byteChan)
wg.Wait()
}
func numPrint(wg *sync.WaitGroup, numChan, byteChan chan struct{}) {
i := 1
for {
if i == 27 {
wg.Done()
break
}
<-numChan
println(i, i+1)
i += 2
byteChan <- struct{}{}
}
}
func bytePrint(wg *sync.WaitGroup, numChan, byteChan chan struct{}) {
i := 'A'
for {
if i > 'Z' {
wg.Done()
break
}
<-byteChan
fmt.Printf("%c%c", i, i+1)
i += 2
numChan <- struct{}{}
}
}最后更新于