Junior — Middle
Ar naudojote sinchronizacijos mechanizmą su sync.Cond savo projektuose?
sobes.tech AI
Atsakymas iš AI
Go projektuose aš naudoju sync.Cond, kad organizuočiau laukimą ir pranešimą tarp gorutinų, kai reikalinga sąlyginė sinchronizacija. Pavyzdžiui, kai viena gorutina turi laukti, kol kita atliks tam tikrą veiksmą arba pakeis būseną.
sync.Cond naudojimo pavyzdys:
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() // pranešimas laukiančiai gorutinai
mu.Unlock()
}()
mu.Lock()
for !ready {
cond.Wait() // laukia signalo
}
fmt.Println("Gorutina pasiruošusi")
mu.Unlock()
}
Šis požiūris yra naudingas, kai reikia tikslesnės būsenos ir sinchronizacijos kontrolės nei paprastas kanalų naudojimas.