이 예제 사용법이 sync.WaitGroup
맞습니까? 예상 된 결과를 제공하지만의 wg.Add(4)
및 위치에 대해 잘 모르겠습니다 wg.Done()
. 4 개의 고 루틴을 한 번에 추가하는 것이 합리적 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()
을 위해 함수를 시작할 때 초기 호출을 권장 합니다.