Buscar..
Bloqueo mutex
El bloqueo mutex en Go le permite asegurarse de que solo una goroutina a la vez tenga un bloqueo:
import "sync"
func mutexTest() {
lock := sync.Mutex{}
go func(m *sync.Mutex) {
m.Lock()
defer m.Unlock() // Automatically unlock when this function returns
// Do some things
}(&lock)
lock.Lock()
// Do some other things
lock.Unlock()
}
El uso de Mutex
permite evitar condiciones de carrera, modificaciones concurrentes y otros problemas asociados con múltiples rutinas concurrentes que operan en los mismos recursos. Tenga en cuenta que Mutex.Unlock()
puede ejecutarse por cualquier rutina, no solo por la rutina que obtuvo el bloqueo. También tenga en cuenta que la llamada a Mutex.Lock()
no fallará si otra rutina mantiene el bloqueo; se bloqueará hasta que se libere el bloqueo.
Consejo: Siempre que esté pasando una variable Mutex a una función, siempre pásela como un puntero. De lo contrario, se hace una copia de su variable, lo que anula el propósito del Mutex. Si está utilizando una versión anterior de Go (<1.7), el compilador no le advertirá sobre este error.