- Mutex) Lock()">(1) func (m *Mutex) Lock()
- (2) func (m *Mutex) Unlock
Mutex是一个互斥锁,可以创建为其他结构体的字段;零值为解锁状态。
Mutex类型的锁和线程无关,可以由不同的线程加锁和解锁。
多个goroutine同时等待一个锁时,唤醒的策略是随机的。
func TestCounter(t *testing.T) {sum := 0var mut sync.Mutexfor 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来解锁它。
