Junior — Middle
Cum poți opri forțat mai multe goroutines care rulează în Go?
sobes.tech AI
Răspuns de la AI
În Go, pentru a opri forțat mai multe goroutines în execuție, se folosește de obicei mecanismul de anulare prin intermediul contextului (context.Context).
Ideea principală:
- Se creează un context cu anulare (
context.WithCancelsaucontext.WithTimeout). - Fiecare goroutine primește acest context și verifică periodic dacă a fost anulat.
- La apelarea funcției de anulare (
cancel()), toate goroutine-urile primesc semnalul și se pot încheia corect.
Exemplu:
ctx, cancel := context.WithCancel(context.Background())
for i := 0; i < 5; i++ {
go func(id int) {
for {
select {
case <-ctx.Done():
fmt.Printf("Goroutine %d oprită\n", id)
return
default:
// lucru în goroutine
time.Sleep(100 * time.Millisecond)
}
}
}(i)
}
// După un timp, oprim toate goroutine-urile
time.Sleep(1 * time.Second)
cancel()
// Așteptăm să se încheie (de exemplu, cu sync.WaitGroup)
Această abordare permite gestionarea centralizată a opririi mai multor goroutine-uri și evită problemele cu terminarea necontrolată.