Ejemplo de uso de sync.WaitGroup golang

El siguiente fragmento de código len(m)no necesariamente va a ser impresa como 10, y por qué? . Si desea len(m)imprimir es 10, ¿debe modificar el código?

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)Cuando el rango de 0-9 son probable para o utilizarse en conjunción con los compañeros de rutinas, para pasar a una serie de incertidumbres co-rutina. Añadir a este paso de parámetros función anónima, el resultado fue de 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))
}

Supongo que te gusta

Origin www.cnblogs.com/flythinking/p/12452742.html
Recomendado
Clasificación