循环打印 fish dag cat
package test
import (
"testing"
"time"
)
func TestLimitRoutines(t *testing.T) {
fishChan := make(chan struct{}, 0)
catChan := make(chan struct{}, 0)
dogChan := make(chan struct{}, 0)
go func() {
for i := 0; i < 100; i++ {
<-fishChan
t.Log("fish")
catChan <- struct{}{}
}
}()
go func() {
for i := 0; i < 100; i++ {
<-catChan
t.Log("cat")
dogChan <- struct{}{}
}
}()
count := 0
go func() {
for i := 0; i < 100; i++ {
<-dogChan
t.Log("dog")
count++
fishChan <- struct{}{}
}
}()
fishChan <- struct{}{}
time.Sleep(time.Second * 10)
t.Log(count)
}