Junior — Middle
Τι τύποι αμοιβαίας εξαίρεσης (Mutex) υλοποιούνται στη βασική βιβλιοθήκη του Go;
sobes.tech AI
Απάντηση από AI
Στη βιβλιοθήκη standard του Go, υλοποιείται ένας βασικός τύπος αμοιβαίας αποκλεισμού: sync.Mutex. Είναι ένα απλό mutex που παρέχει κλείδωμα και ξεκλείδωμα για την προστασία κρίσιμων τμημάτων του κώδικα από ταυτόχρονες προσβάσεις.
Επιπλέον, υπάρχει το sync.RWMutex — μια επεκταμένη έκδοση του mutex που επιτρέπει σε πολλούς αναγνώστες να διατηρούν το κλείδωμα ταυτόχρονα, αλλά η εγγραφή μπλοκάρεται αποκλειστικά.
Παράδειγμα χρήσης του sync.Mutex:
var mu sync.Mutex
var counter int
func increment() {
mu.Lock()
defer mu.Unlock()
counter++
}
Και ένα παράδειγμα με sync.RWMutex:
var rwMu sync.RWMutex
var data int
func readData() int {
rwMu.RLock()
defer rwMu.RUnlock()
return data
}
func writeData(val int) {
rwMu.Lock()
defer rwMu.Unlock()
data = val
}