package main

import (
    "fmt"
    "sync"
)

var wg = sync.WaitGroup{}
var a, b, c = 0, 0, 0

func main() {
    var chan1 = make(chan struct{}, 1)
    var chan2 = make(chan struct{}, 1)
    var chan3 = make(chan struct{}, 1)
    wg.Add(300)
    chan1 <- struct{}{}
    for i := 0; i < 100; i++ {
        go cat(chan1, chan2)
        go dog(chan2, chan3)
        go fish(chan3, chan1)
    }
    wg.Wait()
    fmt.Println("结束")
}

func dog(rev chan struct{}, send chan struct{}) {
    <-rev
    a++
    fmt.Println("Dog", a)
    send <- struct{}{}
    wg.Done()

}
func cat(rev chan struct{}, send chan struct{}) {
    <-rev
    b++
    fmt.Println("Cat", b)
    send <- struct{}{}
    wg.Done()
}
func fish(rev chan struct{}, send chan struct{}) {
    <-rev
    c++

    fmt.Println("Fish", c)
    send <- struct{}{}
    wg.Done()

}
最后修改:2022 年 03 月 19 日
如果觉得我的文章对你有用,请随意赞赏