Sobes.tech
Junior — Middle

Ar naudojote sinchronizacijos mechanizmą su sync.WaitGroup savo projektuose?

sobes.tech AI

Atsakymas iš AI

Taip, projektuose Go dažnai naudojamas sync.WaitGroup sinchronizuoti gorutinas. Šis mechanizmas leidžia laukti, kol baigsis grupė paralelinių užduočių, prieš tęsiant.

Veikimo principas:

  • Sukuriamas WaitGroup objektas.
  • Prieš paleidžiant kiekvieną gorutinas, kviečiama Add(1), kad padidintų skaitiklį.
  • Gorutino viduje, po darbo pabaigos, kviečiama Done(), sumažinant skaitiklį.
  • Pagrindinė gorutina kviečia Wait(), kuris blokuojasi, kol skaitiklis pasiekia nulį.

Pavyzdys:

var wg sync.WaitGroup

wg.Add(2) // laukiame 2 gorutinų

go func() {
    defer wg.Done()
    // pirmos gorutinos darbas
}()

go func() {
    defer wg.Done()
    // antros gorutinos darbas
}()

wg.Wait() // laukiame, kol abi baigsis

Tai naudinga koordinuojant paralelines operacijas ir užkertant kelią programos ankstyvam užbaigimui.