Sobes.tech
Junior — Middle

Použili ste v svojich projektoch mechanizmus synchronizácie pomocou sync.WaitGroup?

sobes.tech AI

Odpoveď od AI

Áno, v projektoch v jazyku Go sa často používa sync.WaitGroup na synchronizáciu gorutín. Tento mechanizmus umožňuje čakať na dokončenie skupiny paralelných úloh pred pokračovaním.

Princíp fungovania:

  • Vytvorí sa objekt WaitGroup.
  • Pred spustením každej gorutiny sa zavolá Add(1), čím sa zvýši čítač.
  • Vo vnútri gorutiny, po dokončení práce, sa zavolá Done(), ktorý znižuje čítač.
  • Hlavná gorutina zavolá Wait(), ktorá sa zablokuje, kým čítač nedosiahne nulu.

Príklad:

var wg sync.WaitGroup

wg.Add(2) // čakáme na 2 gorutiny

go func() {
    defer wg.Done()
    // práca prvej gorutiny
}()

go func() {
    defer wg.Done()
    // práca druhej gorutiny
}()

wg.Wait() // čakáme na obe

Toto je užitočné na koordináciu paralelných operácií a zabránenie predčasnému ukončeniu programu.