加锁代价比较耗时,需要上下文切换,针对基本数据类型,可以使用原子操作保证线程安全,原子操作在用户态就可以完成,因此性能比互斥锁高

    1. package main
    2. import (
    3. "fmt"
    4. "sync"
    5. "sync/atomic"
    6. )
    7. var (
    8. wg sync.WaitGroup
    9. count int32
    10. mu sync.Mutex
    11. )
    12. func incCount() {
    13. defer wg.Done()
    14. for i := 0; i < 100000; i++ {
    15. atomic.AddInt32(&count,1)
    16. }
    17. }
    18. func main() {
    19. wg.Add(2)
    20. go incCount()
    21. go incCount()
    22. wg.Wait()
    23. fmt.Println(count)
    24. }