This question already has an answer here:
How does a mutex.Lock() know which variables to lock?
(1个答案)
5个月前关闭。
像上面的示例一样,
如果
(1个答案)
5个月前关闭。
package main
import (
"sync"
)
type B struct {
balance int32
m *sync.RWMutex
}
var (
a = 100
b = &B {
balance:1000,
m:&sync.RWMutex{},
}
)
func main() {
b.m.Lock()
a--
b.balance--
b.m.Unlock()
}
像上面的示例一样,
b.m
锁定什么?只是b? b和a?还是锁不锁定对象而是关键部分?如果
b.m
锁定了关键部分而不是b.*
,那么将sync.Mutex
放入结构的意义何在? 最佳答案
Mutex
仅保证如果某事物已将其锁定,则在首次释放该锁定之前,它无法再被其他事物再次锁定。如您在示例main
中所做的那样,您可以通过确保在尝试访问要由该锁保护的任何内容之前获得一个锁来正确使用它。