Sobes.tech
Junior — Middle

¿Ha utilizado algún mecanismo de sincronización con sync.Cond en sus proyectos?

sobes.tech AI

Respuesta de la IA

En proyectos en Go, he utilizado sync.Cond para organizar la espera y notificación entre goroutines, cuando era necesario implementar sincronización condicional. Por ejemplo, cuando una goroutine debe esperar a que otra realice una acción específica o cambie su estado.

Ejemplo de uso de sync.Cond:

package main

import (
	"fmt"
	"sync"
	"time"
)

func main() {
	mu := sync.Mutex{}
	cond := sync.NewCond(&mu)
	ready := false

	go func() {
		time.Sleep(time.Second)
		mu.Lock()
		ready = true
		cond.Signal() // notificamos a la goroutine en espera
		mu.Unlock()
	}()

	mu.Lock()
	for !ready {
		cond.Wait() // esperamos la señal
	}
	fmt.Println("Goroutine lista")
	mu.Unlock()
}

Este enfoque es útil cuando se necesita controlar de manera más fina el estado y la sincronización que simplemente usar canales.