不小心复制包含锁的值可能会导致两个副本均无法正常工作。 通常,此类值应通过指针引用。 这里的锁表示实现 sync.Locker
的类型,例如 sync.Mutex
或 sync.WaitGroup
。
示例:
type SafeInt struct {
m sync.Mutex
i int
}
func (s SafeInt) Inc() { // 互斥被复制
s.m.Lock()
s.i++
s.m.Unlock()
}
在应用添加指针快速修复后:
type SafeInt struct {
m sync.Mutex
i int
}
func (s *SafeInt) Inc() {
s.m.Lock()
s.i++
s.m.Unlock()
}