Junior — Middle
Használta már a sync.WaitGroup segítségével történő szinkronizációs mechanizmust a projektjeiben?
sobes.tech MI
Válasz az MI-től
Igen, a Go projektekben gyakran használják a sync.WaitGroup-ot a goroutine-ok szinkronizálására. Ez a mechanizmus lehetővé teszi, hogy várjunk egy párhuzamos feladatcsoport befejezésére, mielőtt folytatnánk.
Működési elv:
- Létrehozunk egy
WaitGroupobjektumot. - Minden goroutine indítása előtt meghívjuk az
Add(1)-et, hogy növeljük a számlálót. - A goroutine belsejében, a munka befejezése után, meghívjuk a
Done()-t, ami csökkenti a számlálót. - A fő goroutine meghívja a
Wait()-t, ami blokkol, amíg a számláló el nem éri a nullát.
Példa:
var wg sync.WaitGroup
wg.Add(2) // két goroutine-t várunk
go func() {
defer wg.Done()
// az első goroutine munkája
}()
go func() {
defer wg.Done()
// a második goroutine munkája
}()
wg.Wait() // várjuk, hogy mindkettő befejeződjön
Ez hasznos a párhuzamos műveletek koordinálásához és a program korai befejezésének megakadályozásához.