Ist diese Beispielverwendung sync.WaitGroupkorrekt? Es gibt das erwartete Ergebnis, aber ich bin mir nicht sicher über die wg.Add(4)und die Position von wg.Done(). Ist es sinnvoll, die vier Goroutinen gleichzeitig mit hinzuzufügen 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("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
defer wg.Done()Aufruf zu Beginn der Funktion empfehlen .