Junior — Middle
Použili jste ve svých projektech mechanismus synchronizace pomocí sync.Cond?
sobes.tech AI
Odpověď od AI
V projektech v Go jsem použil sync.Cond k organizaci čekání a oznámení mezi gorutinami, když bylo potřeba implementovat podmíněnou synchronizaci. Například když jedna gorutina musí čekat, až jiná provede určitou akci nebo změní stav.
Příklad použití 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() // oznámení čekající gorutině
mu.Unlock()
}()
mu.Lock()
for !ready {
cond.Wait() // čekání na signál
}
fmt.Println("Goroutine je připravena")
mu.Unlock()
}
Tento přístup je užitečný, když je potřeba jemnější kontrola stavu a synchronizace než pouhé používání kanálů.