如何在goroutine中计数呢?

goroutine 执行任务,想把执行成功的记个数,这个该怎么做呢?

这是我的代码,是不是有问题呢?


var (
    g    chan int
    quit chan bool
)

func main() {

    quit = make(chan bool)
    var count int

    go B(&count)
    var wg sync.WaitGroup
    wg.Add(5)
    go C(&wg)
    wg.Wait()
    quit <- true

    // <-wait //这样就可以等待B的退出了

    fmt.Println("Main Quit:", count)
}

func C(wg *sync.WaitGroup) {
    g = make(chan int)
    for i := 0; i < 5; i++ {
        g <- i
        wg.Done()
    }
}

func B(c *int) {
    for {
        select {
        case <-g:
            *c++
            fmt.Println(*c)
        case <-quit:
            fmt.Println("B Quit")
            return
        }
    }
}
已邀请:

Xargin

赞同来自: haoc7

atomic

jarlyyn

赞同来自:

加个锁就可以了。

https://tour.golang.org/concurrency/9

要回复问题请先登录注册