Junior — Middle
Használtál valamilyen szinkronizációs mechanizmust a sync.Cond segítségével a projektjeidben?
sobes.tech MI
Válasz az MI-től
Go projektekben a sync.Cond-t használtam a goroutine-ok közötti várakozás és értesítés szervezésére, amikor feltételes szinkronizációra volt szükség. Például, amikor egy goroutine-nek várnia kell, hogy egy másik végrehajt egy adott műveletet vagy megváltoztatja az állapotot.
A sync.Cond használatának példája:
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() // értesítjük a várakozó goroutine-t
mu.Unlock()
}()
mu.Lock()
for !ready {
cond.Wait() // várakozás a jelzésre
}
fmt.Println("Goroutine készen")
mu.Unlock()
}
Ez a megközelítés akkor hasznos, ha finomabb ellenőrzésre van szükség az állapot és a szinkronizáció felett, mint csatornák használata esetén.