Sobes.tech
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.