1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- package util
- import (
- "fmt"
- "sync"
- "testing"
- )
- func cat(catCh, dogCh chan struct{}, wg *sync.WaitGroup) {
- defer wg.Done()
- for i := 0; i < 100; i++ {
- <-catCh
- fmt.Println("cat", i)
- dogCh <- struct{}{}
- }
- }
- func dog(dogCh, fishCh chan struct{}, wg *sync.WaitGroup) {
- defer wg.Done()
- for i := 0; i < 100; i++ {
- <-dogCh
- fmt.Println("dog", i)
- fishCh <- struct{}{}
- }
- }
- func fish(fishCh, catCh chan struct{}, wg *sync.WaitGroup) {
- defer wg.Done()
- for i := 0; i < 100; i++ {
- <-fishCh
- fmt.Println("fish", i)
- catCh <- struct{}{}
- }
- }
- func Test001(T *testing.T) {
- catCh := make(chan struct{}, 1)
- dogCh := make(chan struct{}, 1)
- fishCh := make(chan struct{}, 1)
- var wg sync.WaitGroup
- wg.Add(3)
- go cat(catCh, dogCh, &wg)
- go dog(dogCh, fishCh, &wg)
- go fish(fishCh, catCh, &wg)
- catCh <- struct{}{}
- wg.Wait()
- }
|