2个函数分别打印dog、fish,要求每个函数都要起一个goroutine,按照dog、fish顺序打印在屏幕上100次。
package main
import (
"fmt"
"sync"
)
var waitgroup sync.WaitGroup
// channel 数据交流
func main() {
dogCH := make(chan struct{}, 1)
fishCH := make(chan struct{}, 1)
fishCH <- struct{}{}
go PrintFish(dogCH, fishCH)
go PrintDog(fishCH, dogCH)
waitgroup.Add(2)
waitgroup.Wait()
}
func PrintDog(catCH, dogCH chan struct{}) {
defer waitgroup.Done()
defer close(dogCH)
for i := 0; i < 100; i++ {
<-catCH
fmt.Println("dog ...")
dogCH <- struct{}{}
}
}
func PrintFish(dogCH, fishCH chan struct{}) {
defer waitgroup.Done()
defer close(fishCH)
for i := 0; i < 100; i++ {
<-dogCH
fmt.Println("fish ...")
fishCH <- struct{}{}
}
}