在代码中生硬的使用time.Sleep肯定是不合适的,Go语言中可以使用sync.WaitGroup来实现并发任务的同步。

    1. func TestCounter(t *testing.T) {
    2. sum := 0
    3. var mut sync.Mutex
    4. var wg sync.WaitGroup
    5. for i := 0; i < 5000; i++ {
    6. wg.Add(1) // 计数器+1
    7. go func() {
    8. defer wg.Done() // 计数器-1
    9. defer mut.Unlock()
    10. mut.Lock()
    11. sum++
    12. }()
    13. }
    14. wg.Wait()
    15. t.Log(sum)
    16. }