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.