Sobes.tech
Junior — Middle

Ce tipuri de excluderi mutuale (Mutex) sunt implementate în biblioteca standard Go?

sobes.tech AI

Răspuns de la AI

În biblioteca standard Go, este implementat un tip principal de excludere mutuală: sync.Mutex. Este un mutex simplu care asigură blocarea și deblocarea pentru a proteja secțiunile critice ale codului împotriva accesului simultan.

De asemenea, există sync.RWMutex — o versiune extinsă a mutex-ului, care permite mai multor cititori să mențină blocarea în același timp, dar scrierea este blocată exclusiv.

Exemplu de utilizare a sync.Mutex:

var mu sync.Mutex
var counter int

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

Și un exemplu cu 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
}