sync.mutex 锁定什么?
What does sync.mutex lock?
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
.
中所做的那样
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
.