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.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow