想要得到正确的结果,要把计数器的操作代码部分加上锁:

    var wg sync.WaitGroup
    var lock sync.Mutex
    for i := 0; i < 1000; i++ {
        wg.Add(1)
        go func() {
            defer wg.Done()
            lock.Lock()
            counter++
            lock.Unlock()
        }()
    }
    wg.Wait()
    println(counter)

这样能够得到正确结果:

go run main.go
1000
最后编辑: kuteng  文档更新时间: 2022-03-22 19:29   作者:kuteng