小编Art*_*san的帖子

在 Golang 中使用互斥锁还是互斥锁指针?

我有一个代码片段:

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))
}
Run Code Online (Sandbox Code Playgroud)

但我发现使用互斥指针也有效:

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) …
Run Code Online (Sandbox Code Playgroud)

pointers mutex go

0
推荐指数
1
解决办法
160
查看次数

标签 统计

go ×1

mutex ×1

pointers ×1