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