Sobes.tech
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 WaitGroup objektumot.
  • 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.