Sobes.tech
Junior — Middle

Kuidas tagada, et kõik käimas olevad gorutined programmis lõpetatakse?

sobes.tech AI

Vastus AI-lt

Go keeles ei ole sisseehitatud viisi sundida goroutine'i väljastpoolt lõpetama. Kõigi käimasolevate goroutine'ide lõpetamise tagamiseks kasutatakse tavaliselt sünkronisatsiooni sync.WaitGroup abil.

Tööpõhimõte:

  • Enne iga goroutine käivitamist kutsutakse wg.Add(1).
  • Goroutine lõpus kutsutakse wg.Done().
  • Peafunktsioonis kutsutakse wg.Wait(), mis blokeerib täitmise kuni loendur jõuab nulli.

Näide:

var wg sync.WaitGroup

wg.Add(1)
go func() {
    defer wg.Done()
    // goroutine'i töö
}()

wg.Wait() // oodata, kuni kõik goroutine'id on lõpetatud

Selle meetodiga garantii, et programm ootab kõigi goroutine'ide lõpetamist enne jätkamist või lõpetamist.