Ist diese Beispielverwendung von sync.WaitGroup
korrekt? Es gibt das erwartete Ergebnis, aber ich bin unsicher über die und die Position wg.Done()
. Macht es Sinn, die vier Goroutines gleichzeitig mit wg.Add()
hinzuzufügen?Beispiel für sync.WaitGroup korrekt?
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("Function in background, duration:", 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("Done")
}
Ergebnis (wie erwartet):
Function in background, duration: 150ms
Function in background, duration: 200ms
Function in background, duration: 400ms
Function in background, duration: 600ms
Done
Was passiert, wenn dosomething() stürzt ab, bevor es wg.Done tun kann()? –
Ich weiß, dass das alt ist, aber für zukünftige Leute würde ich einen anfänglichen 'defer wg.Done()' Aufruf am Anfang der Funktion empfehlen. –