Junior — Middle
Da li ste koristili mehanizam za sinhronizaciju pomoću sync.Cond u svojim projektima?
sobes.tech АИ
Одговор од АИ
U Go projektima, koristio sam sync.Cond za organizaciju čekanja i obaveštavanja između gorutina, kada je bilo potrebno implementirati uslovnu sinhronizaciju. Na primer, kada jedna gorutina mora da čeka da druga izvrši određenu radnju ili promeni stanje.
Primer korišćenja 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() // obaveštavamo čekajuću gorutinu
mu.Unlock()
}()
mu.Lock()
for !ready {
cond.Wait() // čekamo signal
}
fmt.Println("Gorutina spremna")
mu.Unlock()
}
Ovaj pristup je koristan kada je potrebno finije kontrolisati stanje i sinhronizaciju nego samo korišćenjem kanala.