"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > El uso de mutex en golang y una explicación detallada

El uso de mutex en golang y una explicación detallada

Publicado el 2025-04-19
Navegar:611

Durante el desarrollo de LiveApi, una herramienta de generación de documentación de AUTO API, necesitaba implementar un mecanismo de cola robusto que se escalara en función de la cantidad de núcleos de máquina del servidor. Esto fue crucial para evitar el uso excesivo de recursos (memoria y CPU) que podría conducir a la inanición de recursos, bloqueos y una mala experiencia del usuario.

En este artículo, explicaré cómo utilicé mutexes en Golang para abordar este desafío.

¿Qué es un mutex?
En la programación concurrente, un mutex (exclusión mutua) es un mecanismo de bloqueo que evita las condiciones de la carrera al garantizar que solo una goldine pueda acceder a un recurso compartido a la vez. Es similar a una clave para una habitación: solo una persona puede contener la llave e ingresar de inmediato.

What is Mutex and How to Use it in Golang?

mutex use en golang
Ilustremos cómo un mutex puede administrar la ejecución de trabajo concurrente:
El paquete de sincronización de GO proporciona varias primitivas para la sincronización, siendo Mutex una de las herramientas más utilizadas.

var (
    maxConcurrentJobs int
    activeJobs        int
    jobMutex          sync.Mutex
)

En este código, la variable ActiveJobs rastrea el número de trabajos en ejecución actualmente. Dado que múltiples goroutinas podrían intentar modificar esta variable simultáneamente, lo que lleva a condiciones de carrera, usamos un mutex para sincronizar el acceso.

// Check if we can process more jobs
jobMutex.Lock()
if activeJobs >= maxConcurrentJobs {
    jobMutex.Unlock()
    // Wait before checking again
    time.Sleep(time.Second)
    continue
}
jobMutex.Unlock()

cómo funciona un mutex
bloqueo : el método Lock () adquiere acceso exclusivo a la sección crítica.

desbloqueo : el método desbloqueo () libera el bloqueo.

Sección crítica : el código entre bloquear y desbloquear donde se accede al recurso compartido **

tipos de mutexes en golang
sync.mutex : este es el bloqueo de exclusión mutua básica en Go. Permite que solo una goroutina acceda a la sección crítica a la vez.

type SafeCounter struct {
    mu    sync.Mutex
    count int
}

sync.rwmutex : este es un lector/escritor mutex que permite a múltiples lectores acceder al recurso compartido simultáneamente, pero solo un escritor a la vez.

var rwMutex sync.RWMutex
// Reader methods
rwMutex.RLock()   // Lock for reading
rwMutex.RUnlock() // Unlock for reading

// Writer methods
rwMutex.Lock()    // Lock for writing
rwMutex.Unlock()  // Unlock for writing

Los mutexes son herramientas esenciales para administrar recursos compartidos en programas de GO concurrentes. Prevengan las condiciones de la carrera y garantizan la integridad de los datos controlando el acceso a secciones críticas del código.

Declaración de liberación Este artículo se reimprime en: https://dev.to/lincemathew/what-is-mutex-and-how-to-use-it-in-golang-1m1i?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarlo.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3