Sobes.tech
Junior — Middle

Vai esat izmantojis sinhronizācijas mehānismu ar sync.WaitGroup savos projektos?

sobes.tech AI

Atbilde no AI

Jā, Go projektos bieži izmanto sync.WaitGroup, lai sinhronizētu gorutinas. Šis mehānisms ļauj gaidīt, līdz paraugu paralēlo uzdevumu grupa tiks pabeigta, pirms turpināt.

Darbības princips:

  • Tiek izveidots WaitGroup objekts.
  • Pirms katras gorutinas palaišanas tiek izsaukts Add(1), lai palielinātu skaitītāju.
  • Gorutinas iekšienē, pēc darba pabeigšanas, tiek izsaukts Done(), kas samazina skaitītāju.
  • Galvenā gorutina izsauc Wait(), kas bloķējas, līdz skaitītājs sasniedz nulli.

Piemērs:

var wg sync.WaitGroup

wg.Add(2) // gaidām 2 gorutinas

go func() {
    defer wg.Done()
    // pirmās gorutinas darbs
}()

go func() {
    defer wg.Done()
    // otras gorutinas darbs
}()

wg.Wait() // gaidām, līdz abas pabeigs

Tas ir noderīgi paralēlo operāciju koordinēšanai un programmas priekšlaicīgas pabeigšanas novēršanai.