Junior — Middle
Hai utilizzato un meccanismo di sincronizzazione con sync.Cond nei tuoi progetti?
sobes.tech AI
Risposta dell'AI
Nei progetti in Go, ho utilizzato sync.Cond per organizzare l'attesa e la notifica tra goroutine, quando era necessario implementare una sincronizzazione condizionale. Ad esempio, quando una goroutine deve aspettare che un'altra esegua una determinata azione o cambi stato.
Esempio di utilizzo di 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() // notificare la goroutine in attesa
mu.Unlock()
}()
mu.Lock()
for !ready {
cond.Wait() // attendere il segnale
}
fmt.Println("Goroutine pronta")
mu.Unlock()
}
Questo approccio è utile quando si ha bisogno di controllare più finemente lo stato e la sincronizzazione rispetto all'uso semplice dei canali.