Explica qué es una variable condicional y cómo se utiliza para sincronizar hilos.
sobes.tech AI
Respuesta de la IA
La variable condicional (condition variable) es un mecanismo de sincronización de hilos que permite a uno o varios hilos esperar a que ocurra una condición específica, mientras otro hilo les notifica sobre un cambio de estado.
En Go, las variables condicionales se implementan mediante el tipo sync.Cond. Funciona junto con un mutex (sync.Mutex), que protege los datos compartidos. El hilo que desea esperar llama a Wait(), liberando el mutex y bloqueándose hasta que otro hilo llama a Signal() (para despertar a un hilo) o Broadcast() (para despertar a todos los que esperan).
Ejemplo de uso:
var mu sync.Mutex
cond := sync.NewCond(&mu)
sharedDataReady := false
// Hilo que espera
mu.Lock()
for !sharedDataReady {
cond.Wait() // libera mu y espera la señal
}
// Aquí sharedDataReady == true
mu.Unlock()
// Hilo que cambia el estado
mu.Lock()
sharedDataReady = true
cond.Signal() // o cond.Broadcast(), para despertar a los que esperan
mu.Unlock()
De esta forma, la variable condicional ayuda a organizar una espera y notificación correctas entre hilos, evitando sondeos activos y condiciones de carrera.