Junior — Middle
Ați folosit vreodată un mecanism de sincronizare cu sync.Cond în proiectele dvs.?
sobes.tech AI
Răspuns de la AI
În proiectele Go, am folosit sync.Cond pentru a organiza așteptarea și notificarea între goroutine-uri, atunci când era necesară o sincronizare condițională. De exemplu, când o goroutine trebuie să aștepte ca alta să efectueze o anumită acțiune sau să schimbe starea.
Exemplu de utilizare a 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() // notificăm goroutine-ul în așteptare
mu.Unlock()
}()
mu.Lock()
for !ready {
cond.Wait() // așteptăm semnalul
}
fmt.Println("Goroutine gata")
mu.Unlock()
}
Această abordare este utilă atunci când ai nevoie de un control mai fin asupra stării și sincronizării decât simpla utilizare a canalelor.