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
变成一个结构体?
A Mutex
只保证如果有东西锁住了它,在锁被释放之前,它不能再被其他东西锁住。这取决于你是否正确地使用它,在你试图访问任何你想要的锁保护的东西之前,确保你获得一个锁,就像你在你的例子中做的一样 main
.