我有多个变量,我想使用这种方法使它们互斥
type var1WithMutex struct {
mu sync.Mutex
var1 int
}
func (v *var1) Set(value int) {
v.mu.Lock()
v.var1 = value
v.mu.Unlock()
}
func (v *var1) Get() (value int) {
v.mu.Lock()
value = v.var1
v.mu.Unlock()
return
}
同样有上百个变量,比如var1, var2, var3.... var100
我如何在不重复这段代码的情况下使它们相互排斥?
请注意,var1、var2、var3 等不是数组的一部分,彼此之间没有任何关系。 var2 可以是 int,var3 可以是 User{}
最佳答案
您可以为每种类型制作不同的 Mutex 对象。 Playground
type MutexInt struct {
sync.Mutex
v int
}
func (i *MutexInt) Get() int {
return i.v
}
func (i *MutexInt) Set(v int) {
i.v = v
}
然后像这样使用它
func main() {
i := MutexInt{v: 0}
i.Lock()
i.Set(2)
fmt.Println(i.Get())
i.Unlock()
}
关于go - 如何在 Golang 中对多个变量应用单独的 Mutex?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27020749/