- 简单介绍:
sync.WaitGroup
等待一定数量的gorutine。wg.Add(num)
增加num个。wg.Done
相当于等待的gorutine数量减少1。当等待的gorutine数量为0时,结束。
package main
import (
"sync"
)
// 全局变量
var counter int
func main() {
var wg sync.WaitGroup
for i := 0; i < 1000; i++ {
wg.Add(1)
go func() {
defer wg.Done()
counter++
}()
}
wg.Wait()
println(counter)
}
结果是不唯一的。原因是:
mutex
是一个互斥锁。
package main
import (
"sync"
)
// 全局变量
var counter int
var l sync.Mutex
func main() {
var wg sync.WaitGroup
for i := 0; i < 1000; i++ {
wg.Add(1)
go func() {
defer wg.Done()
l.Lock()
counter++
l.Unlock()
}()
}
wg.Wait()
println(counter)
}