Junior
Mis on WaitGroup Go-s ja milleks seda kasutatakse?
sobes.tech AI
Vastus AI-lt
WaitGroup on sünkroniseerimismehhanism Go keeles, mis võimaldab oodata gorutinite grupi lõpetamist.
Seda kasutatakse:
- Ootamaks, kuni kõik gorutinid lõpetavad enne funktsiooni või programmi väljumist.
- Töö koordineerimiseks mitme gorutini vahel.
Kasutusnäide:
package main
import (
"fmt"
"sync"
"time"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Vähendab loendurit gorutina lõpus
fmt.Printf("Tööline %d alustas\n", id)
time.Sleep(time.Second) // Töö simulatsioon
fmt.Printf("Tööline %d lõpetas\n", id)
}
func main() {
var wg sync.WaitGroup // Deklareerime WaitGroup
numWorkers := 3
for i := 1; i <= numWorkers; i++ {
wg.Add(1) // Suurendab loendurit enne iga gorutina käivitamist
go worker(i, &wg)
}
wg.Wait() // Blokeerib maini täitmise, kuni loendur jõuab 0-ni
fmt.Println("Kõik tööline lõpetasid")
}
Peamised meetodid:
Add(delta int): SuurendabWaitGroupsisemist loenduritdelta-ga. Tuleb seda kutsuda enne iga jälgitava gorutina käivitamist.Done(): VähendabWaitGroupsisemist loendurit 1-iga. Tavaliselt kutsutaksedefer-iga gorutinas, et tagada loenduri vähendamine isegi panic'i korral.Wait(): Blokeerib jooksva gorutina, kuniWaitGroupsisemine loendur jõuab 0-ni.