Sobes.tech
Junior — Middle

Ako zabezpečiť, aby všetky spustené gorutiny v programe boli dokončené?

sobes.tech AI

Odpoveď od AI

V jazyku Go neexistuje zabudovaný spôsob, ako nútene ukončiť gorutinu zvonku. Aby ste zabezpečili, že všetky spustené gorutiny sa ukončia, zvyčajne sa používa synchronizácia pomocou sync.WaitGroup.

Princíp fungovania:

  • Pred spustením každej gorutiny sa zavolá wg.Add(1).
  • Na konci gorutiny sa zavolá wg.Done().
  • V hlavnej funkcii sa zavolá wg.Wait(), ktoré blokuje vykonávanie, kým číselník nedosiahne nulu.

Príklad:

var wg sync.WaitGroup

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

wg.Wait() // počkať na dokončenie všetkých gorútin

Týmto spôsobom program garantovane počká na dokončenie všetkých gorútin pred pokračovaním alebo ukončením.