Sobes.tech
Junior — Middle

Εξηγήστε τι είναι το κλείδωμα Read-Write (RWMutex) και πώς χρησιμοποιείται για τη διαχείριση της πρόσβασης στα δεδομένα.

sobes.tech AI

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

Το κλείδωμα ανάγνωσης-εγγραφής (RWMutex) στο Go είναι ένας μηχανισμός συγχρονισμού που επιτρέπει σε πολλαπλές goroutines να διαβάζουν δεδομένα ταυτόχρονα, ενώ ταυτόχρονα εγγυάται αποκλειστική πρόσβαση κατά την εγγραφή.

  • RLock() / RUnlock() — κλείδωμα για ανάγνωση. Πολλές goroutines μπορούν να διατηρούν αυτό το κλείδωμα ταυτόχρονα.
  • Lock() / Unlock() — κλείδωμα για εγγραφή. Μόνο μια goroutine μπορεί να το διατηρεί, και κατά τη διάρκεια αυτού δεν επιτρέπονται αναγνώσεις.

Αυτό αυξάνει την απόδοση όταν υπάρχουν πολλές λειτουργίες ανάγνωσης και σπάνιες εγγραφές.

Παράδειγμα χρήσης:

var rwMutex sync.RWMutex
var data int

func readData() int {
    rwMutex.RLock()
    defer rwMutex.RUnlock()
    return data
}

func writeData(val int) {
    rwMutex.Lock()
    defer rwMutex.Unlock()
    data = val
}

Σε αυτό το παράδειγμα, πολλές goroutines μπορούν να καλούν το readData() ταυτόχρονα, αλλά αν καλείται το writeData(), μπλοκάρει όλες τις αναγνώσεις και εγγραφές μέχρι να ολοκληρωθεί.