Mutex 是一個互斥鎖,能夠建立爲其餘結構體的字段;零值爲解鎖狀態。Mutex 類型的鎖和線程無關,能夠由不一樣的線程加鎖和解鎖。
func (m *Mutex) Lock()
Lock 方法鎖住 m,若是 m 已經加鎖,則阻塞直到 m 解鎖。golang
func (m *Mutex) Unlock()
Unlock 方法解鎖 m,若是 m 未加鎖會致使運行時錯誤。post
package main import ( "fmt" "sync" "time" ) func main() { var mutex sync.Mutex wait := sync.WaitGroup{} fmt.Println("Locked") mutex.Lock() for i := 1; i <= 3; i++ { wait.Add(1) go func(i int) { fmt.Println("Not lock:", i) mutex.Lock() fmt.Println("Lock:", i) time.Sleep(time.Second) fmt.Println("Unlock:", i) mutex.Unlock() defer wait.Done() }(i) } time.Sleep(time.Second) fmt.Println("Unlocked") mutex.Unlock() wait.Wait() }
運行結果:.net
Locked Not lock: 1 Not lock: 2 Not lock: 3 Unlocked Lock: 1 Unlock: 1 Lock: 2 Unlock: 2 Lock: 3 Unlock: 3
原文地址: https://shockerli.net/post/go...
更多文章請訪問個人我的博客: https://shockerli.net