Sobes.tech
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 επιτρέπει την αποτελεσματική συγχρονισμένη εκτέλεση παράλληλων εργασιών.