Cách sử dụng ví dụ này có sync.WaitGroupđúng không? Nó mang lại kết quả mong đợi, nhưng tôi không chắc chắn về wg.Add(4)vị trí của wg.Done(). Có hợp lý khi thêm bốn goroutines cùng một lúc wg.Add()không?
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")
}
Kết quả (như mong đợi):
Function in background, duration: 150ms
Function in background, duration: 200ms
Function in background, duration: 400ms
Function in background, duration: 600ms
Done
defer wg.Done()lệnh gọi ban đầu khi bắt đầu hàm.