Sobes.tech
Junior — Middle

Používali jste mechanismus synchronizace pomocí sync.WaitGroup ve svých projektech?

sobes.tech AI

Odpověď od AI

Ano, v projektech v jazyce Go se často používá sync.WaitGroup k synchronizaci gorutin. Tento mechanismus umožňuje čekat na dokončení skupiny paralelních úkolů před pokračováním.

Princip fungování:

  • Vytvoří se objekt WaitGroup.
  • Před spuštěním každé gorutiny se zavolá Add(1), čímž se zvýší čítač.
  • Uvnitř gorutiny po dokončení práce se zavolá Done(), čímž se čítač sníží.
  • Hlavní gorutina zavolá Wait(), která se zablokuje, dokud čítač nedosáhne nuly.

Příklad:

var wg sync.WaitGroup

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

go func() {
    defer wg.Done()
    // práce první gorutiny
}()

go func() {
    defer wg.Done()
    // práce druhé gorutiny
}()

wg.Wait() // čekáme na obě

Toto je užitečné pro koordinaci paralelních operací a zabránění předčasnému ukončení programu.