如何在 Golang 中对多个变量应用单独的互斥锁?

Rah*_*sad 5 synchronization mutex go

我有多个变量,我想使用此方法使其互斥

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

同样,有数百个变量,如 var1、var2、var3.... var100
我如何使它们全部互斥而不重复此代码?
请注意,var1、var2、var3 等不是数组的一部分,彼此之间没有任何关系。var2 可以是 int,var3 可以是 User{}

km6*_*zla 3

您可以为每种类型创建不同的互斥对象。操场

type MutexInt struct {
    sync.Mutex
    v int
}

func (i *MutexInt) Get() int {
    return i.v
}

func (i *MutexInt) Set(v int) {
    i.v = v
}
Run Code Online (Sandbox Code Playgroud)

并像这样使用它

func main() {
    i := MutexInt{v: 0}
    i.Lock()
    i.Set(2)
    fmt.Println(i.Get())
    i.Unlock()
}
Run Code Online (Sandbox Code Playgroud)