Sobes.tech
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, για μετάδοση μηνυμάτων — κανάλια.