首页  

GO mutex 与 atomic 性能对比     所属分类 go 浏览量 674
并发递增计数
count2.go  使用互斥锁   Mutex 循环外部加锁
count3.go  使用原子操作 atomic
count4.go  使用互斥锁   Mutex 循环内部加锁


count2.go   
func countadd(){
   defer wg.Done()
   lock.Lock()  
   defer lock.Unlock()
   for i := 0; i < NUM; i++ {
      count++;
   }
}

count3.go
func countadd(){
   defer wg.Done()
   for i := 0; i < NUM; i++ {
         atomic.AddInt32(&count,1)
   }
}

count4.go
func countadd(){
   defer wg.Done()
   // lock.Lock()  
   // defer lock.Unlock()
   // 注意 lock 在循环里面 !!!
   // 
   for i := 0; i < NUM; i++ {
      lock.Lock()  
      count++;
      lock.Unlock()
   }
}

go run count2.go
100000000 217.503133ms

go run count3.go
100000000 3.312771846s

go run count4.go
100000000 16.262437483s


注意count2 count4 的区别 ,加锁 循环内部 vs 循环外部

mutex 与 atomic pk
应该在循环内部加锁



完整代码 https://gitee.com/dyyx/hellocode/blob/master/web/tech/go/demo/count2.go https://gitee.com/dyyx/hellocode/blob/master/web/tech/go/demo/count3.go https://gitee.com/dyyx/hellocode/blob/master/web/tech/go/demo/count4.go
Go语言atomic原子操作 GO 并发递增计数实例

上一篇     下一篇
GO 并发递增计数实例

Go并发构建模块

Go语言atomic原子操作

cannot find GOROOT directory

自定义springboot starter

springboot禁用特定的自动配置类