go - 如何在 Golang 中对多个变量应用单独的 Mutex?

标签 go mutex sync

我有多个变量,我想使用这种方法使它们互斥

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/

相关文章:

go - golang 中无效的内存地址或 nil 指针取消引用

go - JWT 如何解析声明有效性和错误?

c - 具有全局访问权限的运行时定义大小互斥矩阵(C 语言)

pointers - Setter 方法不设置结构属性 Golang

go - 从go例程中堆叠数据

cocoa - Mac 上单实例应用程序的理想方式

C++ 线程不检测全局变量变化

c# - 如何获取文件到WP7?

linux - 'sync' 和 'syncfs' 系统调用是否映射到 FUSE 的 'fsync' 调用?

javascript - HTML5 应用数据库同步