Sobes.tech
Senior

Ποια από τα παρακάτω είναι μέσα συγχρονισμού στο Go; Κανάλια, sync.WaitGroup, sync.Mutex, sync.Cond;

sobes.tech AI

Απάντηση από AI

Στο Go, όλα τα αναφερόμενα μέσα — κανάλια (channels), sync.WaitGroup, sync.Mutex και sync.Cond — είναι μηχανισμοί συγχρονισμού, αλλά εξυπηρετούν διαφορετικούς σκοπούς:

  • Κανάλια (channels) — επιτρέπουν ασφαλή ανταλλαγή δεδομένων μεταξύ goroutines και χρησιμεύουν για συγχρονισμό μέσω μετάδοσης μηνυμάτων.
  • sync.Mutex — mutex για αμοιβαία αποκλεισμό, αποτρέπει ταυτόχρονη πρόσβαση σε κοινόχρηστους πόρους.
  • sync.WaitGroup — επιτρέπει την αναμονή για την ολοκλήρωση μιας ομάδας goroutines και τις συγχρονίζει.
  • sync.Cond — μεταβλητή συνθήκης, χρησιμοποιείται για πιο πολύπλοκο συγχρονισμό, όταν οι goroutines περιμένουν να εκπληρωθεί μια συγκεκριμένη συνθήκη.

Παράδειγμα χρήσης του sync.WaitGroup και του sync.Mutex:

var mu sync.Mutex
var wg sync.WaitGroup
counter := 0

wg.Add(2)
go func() {
    defer wg.Done()
    mu.Lock()
    counter++
    mu.Unlock()
}()
go func() {
    defer wg.Done()
    mu.Lock()
    counter++
    mu.Unlock()
}()
wg.Wait()
fmt.Println("Μετρητής:", counter)