在代码中生硬的使用time.Sleep肯定是不合适的,Go语言中可以使用sync.WaitGroup来实现并发任务的同步。
func TestCounter(t *testing.T) {
sum := 0
var mut sync.Mutex
var wg sync.WaitGroup
for i := 0; i < 5000; i++ {
wg.Add(1) // 计数器+1
go func() {
defer wg.Done() // 计数器-1
defer mut.Unlock()
mut.Lock()
sum++
}()
}
wg.Wait()
t.Log(sum)
}