Middle+
¿Qué primitivas de sincronización de goroutines existen en Go?
sobes.tech AI
Respuesta de la IA
En Go, los principales primitivas utilizados para sincronizar goroutines son:
- Mutex (sync.Mutex) — garantiza exclusión mutua, bloqueando el acceso a recursos compartidos.
- RWMutex (sync.RWMutex) — extensión de Mutex que permite a varias goroutines leer simultáneamente, pero bloquea la escritura.
- WaitGroup (sync.WaitGroup) — permite esperar a que un conjunto de goroutines finalice.
- Channel (chan) — canal para transmitir datos entre goroutines, proporciona sincronización mediante el envío de mensajes.
- Once (sync.Once) — garantiza que una función específica se ejecute solo una vez.
- Cond (sync.Cond) — variable condicional para sincronización más compleja, como esperar a un estado específico.
Ejemplo de uso de WaitGroup y Mutex:
var mu sync.Mutex
var wg sync.WaitGroup
var counter int
func increment() {
defer wg.Done()
mu.Lock()
counter++
mu.Unlock()
}
func main() {
wg.Add(3)
go increment()
go increment()
go increment()
wg.Wait()
fmt.Println("Contador:", counter)
}