atomic和mutex锁问题
曹大,昨天直播中提到了
// sync.Mutex测试结果:
func test1() {
var wg sync.WaitGroup
var mutex sync.Mutex
count := int64(0)
t := time.Now()
for i := 0; i < 10000; i++ {
wg.Add(1)
go func(i int) {
mutex.Lock()
count++
wg.Done()
mutex.Unlock()
}(i)
}
wg.Wait()
fmt.Printf("test1 花费时间:%d, count的值为:%d \n", time.Now().Sub(t), count)
}
// sync.atomic
func test2() {
var wg sync.WaitGroup
count := int64(0)
t := time.Now()
for i := 0; i < 10000; i++ {
wg.Add(1)
go func(i int) {
atomic.AddInt64(&count, 1)
wg.Done()
}(i)
}
wg.Wait()
fmt.Printf("test2 花费时间:%d, count的值为:%d \n", time.Now().Sub(t), count)
}
test1 花费时间:4030930, count的值为:10000
test2 花费时间:3097699, count的值为:10000
测试结果说明atomic的效率是优于mutex的,为什么建议平常使用mutex,是因为atomic是对内存块加锁,影响系统的整体性能么?
35
收起
正在回答 回答被采纳积分+1
1回答
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星