Sobes.tech
Junior — Middle

Quali tipi di mutua esclusione (Mutex) sono implementati nella libreria standard di Go?

sobes.tech AI

Risposta dell'AI

Nella libreria standard di Go, viene implementato un tipo principale di mutua esclusione: sync.Mutex. È un mutex semplice che garantisce blocco e sblocco per proteggere le sezioni critiche del codice da accessi simultanei.

Inoltre, esiste sync.RWMutex, una versione estesa del mutex che permette a più lettori di mantenere il blocco contemporaneamente, ma la scrittura viene bloccata in modo esclusivo.

Esempio di utilizzo di sync.Mutex:

var mu sync.Mutex
var counter int

func increment() {
    mu.Lock()
    defer mu.Unlock()
    counter++
}

E un esempio con 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
}