क्या यह उदाहरण sync.WaitGroupसही का उपयोग है ? यह अपेक्षित परिणाम देता है, लेकिन मैं wg.Add(4)और की स्थिति के बारे में अनिश्चित हूं wg.Done()। क्या यह एक बार में चार गोरोइन्ट्स को जोड़ने के लिए समझ में आता है 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")
}
परिणाम (उम्मीद के अनुसार):
Function in background, duration: 150ms
Function in background, duration: 200ms
Function in background, duration: 400ms
Function in background, duration: 600ms
Done
defer wg.Done()समारोह की शुरुआत में एक प्रारंभिक कॉल की सिफारिश करूंगा ।