Go 互斥锁
示例
Go中的互斥锁可让您确保一次只有一个goroutine具有锁:
import "sync" func mutexTest() { lock := sync.Mutex{} go func(m *sync.Mutex) { m.Lock() defer m.Unlock() //此功能返回时自动解锁 //做些事 }(&lock) lock.Lock() //做其他事情 lock.Unlock() }
使用aMutex可以避免争用条件,并发修改以及与在同一资源上运行的多个并发例程相关的其他问题。请注意,它可以由任何例程执行,而不仅仅是获得锁定的例程。还要注意,如果另一个例程持有该锁,则对to的调用不会失败;它将一直阻塞,直到释放锁为止。Mutex.Unlock()Mutex.Lock()
提示:每当将Mutex变量传递给函数时,始终将其作为指针传递。否则,将为您的变量创建一个副本,这违反了Mutex的目的。如果您使用的是较旧的Go版本(<1.7),则编译器不会就此错误警告您!