Junior — Middle
Ποιες τεχνικές χρήσης μπλοκαρισμάτων ή άλλων μηχανισμών για την αποτροπή ταυτόχρονης πρόσβασης στα δεδομένα γνωρίζεις;
sobes.tech AI
Απάντηση από AI
Οι βασικές τεχνικές για την αποτροπή ταυτόχρονης πρόσβασης σε δεδομένα στο Go:
- Mutex (sync.Mutex): κλείδωμα της κρίσιμης ενότητας ώστε μόνο ένα νήμα να μπορεί να εργαστεί με τα δεδομένα.
var mu sync.Mutex
mu.Lock()
// εργασία με κοινά δεδομένα
mu.Unlock()
-
RWMutex (sync.RWMutex): επιτρέπει σε πολλούς αναγνώστες να διαβάζουν δεδομένα ταυτόχρονα, αλλά μπλοκάρει την εγγραφή.
-
Κάναλοι (channels): μετάδοση δεδομένων μεταξύ goroutines, αποφεύγοντας την άμεση πρόσβαση σε κοινά δεδομένα.
-
Ατομικές λειτουργίες (sync/atomic): για απλές λειτουργίες με μεταβλητές χωρίς πλήρη κλείδωμα.
-
sync.Once: για μια φορά αρχικοποίηση δεδομένων.
Η επιλογή του μηχανισμού εξαρτάται από το έργο: για απλή αμοιβαία εξαίρεση — Mutex, για διαχωρισμό ανάγνωσης και εγγραφής — RWMutex, για μετάδοση μηνυμάτων — κανάλια.