sync.Mutex 是一个互斥锁,用来保证在任一时刻只能有一个协程执行某段代码。
特性
- Mutex 的零值为解锁状态;
 - Mutex 与协程无关,可以安全的由不同的协程加锁、解锁;
 - 对锁定状态下的 Mutex 进行 Lock() 操作会阻塞当前 goroutine,直到 Mutex 被解锁;
 - 对未加锁的 Mutex 进行 Unlock() 操作会引发 panic 异常;
Demo
```go package main 
import ( “fmt” “sync” “time” )
type User struct { sync.Mutex }
func main() { user := &User{} wait := sync.WaitGroup{} fmt.Println(“Locked”) user.Lock()
for i := 1; i <= 3; i++ {wait.Add(1)go func(index int) {fmt.Println("not lock: ", index)user.Lock()defer user.Unlock()fmt.Println("lock: ", index)time.Sleep(time.Millisecond)fmt.Println("unlock: ", index)wait.Done()}(i)}time.Sleep(time.Millisecond)fmt.Println("unlocked")user.Unlock()wait.Wait()
}
```

