加锁代价比较耗时,需要上下文切换,针对基本数据类型,可以使用原子操作保证线程安全,原子操作在用户态就可以完成,因此性能比互斥锁高
package main
import (
"fmt"
"sync"
"sync/atomic"
)
var (
wg sync.WaitGroup
count int32
mu sync.Mutex
)
func incCount() {
defer wg.Done()
for i := 0; i < 100000; i++ {
atomic.AddInt32(&count,1)
}
}
func main() {
wg.Add(2)
go incCount()
go incCount()
wg.Wait()
fmt.Println(count)
}