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)