问:
要求创建三个函数分别打印,“dog”,“cat”,“fish”,
要求每个函数起一个goroutine,请按照dog,cat,fish的顺序,打印四次,输出到控制台。
代码:
package main
import (
"fmt"
)
func main() {
dogCh := make(chan bool, 1) //给一个1的缓存区是为了暂存fish函数最后发生的一个true
catCh := make(chan bool)
fishCh := make(chan bool)
exitch := make(chan bool)
go func() {
for i := 0; i < 4; i++ {
if <-dogCh {
fmt.Println("dog")
catCh <- true
}
}
}()
go func() {
for i := 0; i < 4; i++ {
if <-catCh {
fmt.Println("cat")
fishCh <- true
}
}
}()
go func() {
defer close(exitch) //在协程最后close exit给出信号协程执行完毕,避免主go结束协程未跑完造成死锁
for i := 0; i < 4; i++ {
if <-fishCh {
fmt.Println("fish")
dogCh <- true
}
}
}()
dogCh <- true
<-exitch
}