Junior — Middle
Πώς υλοποιείτε μια συγχρονισμένη αναμονή για την ολοκλήρωση πολλαπλών παράλληλων εργασιών σε ένα πρόγραμμα Go;
sobes.tech AI
Απάντηση από AI
Στη Go, για να περιμένετε συγχρονισμένα την ολοκλήρωση πολλαπλών παράλληλων εργασιών, συνήθως χρησιμοποιείται το sync.WaitGroup. Αυτό επιτρέπει την εκκίνηση πολλαπλών goroutines και την αναμονή να ολοκληρωθούν.
Παράδειγμα:
package main
import (
"fmt"
"sync"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Ενημερώνει το WaitGroup ότι η εργασία ολοκληρώθηκε
fmt.Printf("Εργάτης %d ξεκίνησε\n", id)
// προσομοίωση εργασίας
// time.Sleep(time.Second)
fmt.Printf("Εργάτης %d τελείωσε\n", id)
}
func main() {
var wg sync.WaitGroup
numWorkers := 3
wg.Add(numWorkers) // Ορίζει τον αριθμό των εργασιών
for i := 1; i <= numWorkers; i++ {
go worker(i, &wg)
}
wg.Wait() // Περιμένει να ολοκληρωθούν όλες οι goroutines
fmt.Println("Όλοι οι εργάτες τελείωσαν")
}
Έτσι, το WaitGroup επιτρέπει την αποτελεσματική συγχρονισμένη εκτέλεση παράλληλων εργασιών.