Est-ce que cet exemple d'utilisation de sync.WaitGroup
est correct ? Il donne le résultat attendu, mais je ne suis pas sûr de wg.Add(4)
et de la position de wg.Done()
. Est-ce logique d'ajouter les quatre goroutines en une seule fois avec wg.Add()
?
http://play.golang.org/p/ecvYHiie0P
package main
import (
"fmt"
"sync"
"time"
)
func dosomething(millisecs time.Duration, wg *sync.WaitGroup) {
duration := millisecs * time.Millisecond
time.Sleep(duration)
fmt.Println("Fonction en arrière-plan, durée:", duration)
wg.Done()
}
func main() {
var wg sync.WaitGroup
wg.Add(4)
go dosomething(200, &wg)
go dosomething(400, &wg)
go dosomething(150, &wg)
go dosomething(600, &wg)
wg.Wait()
fmt.Println("Fait")
}
Résultat (comme prévu) :
Fonction en arrière-plan, durée: 150ms
Fonction en arrière-plan, durée: 200ms
Fonction en arrière-plan, durée: 400ms
Fonction en arrière-plan, durée: 600ms
Fait