Junior — Middle
Utilizou algum mecanismo de sincronização com sync.Cond nos seus projetos?
sobes.tech IA
Resposta da IA
Nos projetos em Go, utilizei sync.Cond para organizar a espera e notificação entre goroutines, quando era necessário implementar sincronização condicional. Por exemplo, quando uma goroutine precisa esperar que outra realize uma ação específica ou altere o estado.
Exemplo 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 goroutine aguardando
mu.Unlock()
}()
mu.Lock()
for !ready {
cond.Wait() // aguardando o sinal
}
fmt.Println("Goroutine pronta")
mu.Unlock()
}
Essa abordagem é útil quando é necessário controlar de forma mais refinada o estado e a sincronização do que simplesmente usar canais.