- Mutex) Lock()">(1) func (m *Mutex) Lock()
- (2) func (m *Mutex) Unlock
Mutex是一个互斥锁,可以创建为其他结构体的字段;零值为解锁状态。
Mutex类型的锁和线程无关,可以由不同的线程加锁和解锁。
多个goroutine同时等待一个锁时,唤醒的策略是随机的。
func TestCounter(t *testing.T) {
sum := 0
var mut sync.Mutex
for i := 0; i < 5000; i++ {
go func() {
defer mut.Unlock()
mut.Lock()
sum++
}()
}
time.Sleep(time.Second)
t.Log(sum)
}
(1) func (m *Mutex) Lock()
(2) func (m *Mutex) Unlock
unlock 解锁 m。
如果在进入 Unlock 时未锁定 m,则会导致运行时错误。
锁定的互斥锁未与特定 goroutine 关联。
允许一个goroutine锁定Mutex,然后安排另一个Goroutine来解锁它。