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),则编译器不会就此错误警告您!