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
WaitGroupobjektas. - 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.