美文网首页
golang之sync.WaitGroup示例

golang之sync.WaitGroup示例

作者: 二十亿光年的孤独 | 来源:发表于2020-03-10 00:32 被阅读0次

下面一段代码 len(m) 不一定会打印为 10,为什么?。如果想要 len(m) 打印为 10,应该怎么修改代码?

func main() {
    const N = 10
    m := make(map[int]int)
    wg := &sync.WaitGroup{}
    mu := &sync.Mutex{}
    wg.Add(N)
    for i := 0; i < N; i++ {
        go func() {
            defer wg.Done()
            mu.Lock()
            m[i] = i
            mu.Unlock()
        }()
    }
    wg.Wait()
    println(len(m))
}

len(m)0-9都有可能 for或者range 与协程配合使用时,for 传入给协程的数不确定。给这个匿名函数加传入参数,结果才为10。

func main() {
    const N = 10
    m := make(map[int]int)
    wg := &sync.WaitGroup{}
    mu := &sync.Mutex{}
    wg.Add(N)
    for i := 0; i < N; i++ {
        go func(i int) {
            defer wg.Done()
            mu.Lock()
            m[i] = i
            mu.Unlock()
        }(i)
    }
    wg.Wait()
    println(len(m))
}

相关文章

网友评论

      本文标题:golang之sync.WaitGroup示例

      本文链接:https://www.haomeiwen.com/subject/dczvdhtx.html