package main
import (
"fmt"
"sync"
)
func main() {
var resultchan=make(chan interface{})
var signchan=make(chan struct{})
var chartArr=[]string{"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"}
syc:=sync.NewCond(&sync.Mutex{})
sycend1:=sync.NewCond(&sync.Mutex{})
sycend2:=sync.NewCond(&sync.Mutex{})
go func() {
go func() {
for _,v:=range chartArr{
<-signchan
resultchan<-v
syc.Signal()
}
sycend1.Signal()
}()
go func() {
for i:=1;i<27;i++{
resultchan<-i
signchan<- struct{}{}
syc.L.Lock()
syc.Wait()
syc.L.Unlock()
}
sycend2.Signal()
}()
}()
go func() {
sycend1.L.Lock()
sycend1.Wait()
sycend1.L.Unlock()
sycend2.L.Lock()
sycend2.Wait()
sycend2.L.Unlock()
close(resultchan)
}()
for v:=range resultchan{
fmt.Print(v)
}
}
打印结果:
1A2B3C4D5E6F7G8H9I10J11K12L13M14N15O16P17Q18R19S20T21U22V23W24X25Y26Z