Sobes.tech
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
}