我有一个代码片段:
type calculation struct{
sum int
mutex sync.Mutex
}
func dosomething(c *calculation , wg *sync.WaitGroup) {
c.mutex.Lock()
c.sum++
c.mutex.Unlock()
wg.Done()
}
func main() {
t := time.Now()
c := new(calculation)
wg := new(sync.WaitGroup)
for i:=0; i<10000000; i++{
wg.Add(1)
go dosomething(c, wg)
}
wg.Wait()
fmt.Println(c.sum)
fmt.Println(time.Since(t))
}
但我发现使用互斥指针也有效:
type calculation struct{
sum int
mutex *sync.Mutex
}
func dosomething(c *calculation , wg *sync.WaitGroup) {
c.mutex.Lock()
c.sum++
c.mutex.Unlock()
wg.Done()
}
func main() {
t := time.Now()
c := &calculation{0, new(sync.Mutex)}
wg := new(sync.WaitGroup)
for i:=0; i<10000000; i++{
wg.Add(1)
go dosomething(c, wg)
}
wg.Wait()
fmt.Println(c.sum)
fmt.Println(time.Since(t))
}
我对这2个版本进行了一些测试,发现经过的时间很接近。
那么我应该使用哪一个呢?为什么我应该使用互斥或互斥指针?它们是否存在性能差异?
qq_笑_17
慕后森
相关分类