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(), μπλοκάρει όλες τις αναγνώσεις και εγγραφές μέχρι να ολοκληρωθεί.