Sobes.tech
Senior

¿Cómo sincronizar el acceso de varias goroutines a un objeto compartido en el montón?

sobes.tech AI

Respuesta de la IA

Para sincronizar el acceso de varias goroutines a un objeto compartido en Go, generalmente se utilizan mecanismos del paquete sync:

  • Mutex (sync.Mutex) — bloquea el acceso al recurso, permitiendo que una goroutine trabaje con el objeto mientras las otras esperan.
  • RWMutex (sync.RWMutex) — permite que varias goroutines lean el objeto simultáneamente, pero bloquea la escritura si alguien está escribiendo.

Ejemplo usando sync.Mutex:

import (
    "sync"
)

type SafeCounter struct {
    mu sync.Mutex
    count int
}

func (c *SafeCounter) Inc() {
    c.mu.Lock()
    defer c.mu.Unlock()
    c.count++
}

func (c *SafeCounter) Value() int {
    c.mu.Lock()
    defer c.mu.Unlock()
    return c.count
}

De esta forma, antes de acceder al objeto compartido, la goroutine bloquea el mutex, y después de terminar, lo desbloquea. Esto previene condiciones de carrera y asegura un trabajo correcto con datos compartidos.