我在 Go 中有一个包含互斥锁的结构,我想确保该互斥锁从不nil。为此,我实现了一个GetMutex()函数,它检查互斥锁是否为 nil,如果是,则为其分配一个值。
我的问题是:以下代码线程安全吗?如果不是,那么确保mux始终初始化的惯用方法是什么?我唯一能想到的就是在这个包中有一个全局互斥锁,它在我的GetMutex()函数中使用,但也许有不同的方法。
package main
import (
"sync"
)
type Counter struct {
mux *sync.Mutex
counter int
}
// Is this thread safe?
func (c *Counter) GetMux() *sync.Mutex {
if c.mux == nil {
c.mux = &sync.Mutex{}
}
return c.mux
}
func (c *Counter) Inc() {
c.GetMux().Lock()
c.counter++
c.GetMux().Unlock()
}
func main() {
c := &Counter{}
c.Inc()
}
子衿沉夜
相关分类