本文共 1194 字,大约阅读时间需要 3 分钟。
Mutex 是一个互斥锁,可以创建为其他结构体的字段;零值为解锁状态。Mutex 类型的锁和线程无关,可以由不同的线程加锁和解锁。
原文地址:
func (m *Mutex) Lock()
Lock 方法锁住 m,如果 m 已经加锁,则阻塞直到 m 解锁。
func (m *Mutex) Unlock()
Unlock 方法解锁 m,如果 m 未加锁会导致运行时错误。
package mainimport ( "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()}
运行结果:
LockedNot lock: 1Not lock: 2Not lock: 3UnlockedLock: 1Unlock: 1Lock: 2Unlock: 2Lock: 3Unlock: 3
原文地址:
转载地址:http://xmxto.baihongyu.com/