Sobes.tech
Junior — Middle

Jakie typy wzajemnych wykluczeń (Mutex) są zaimplementowane w standardowej bibliotece Go?

sobes.tech AI

Odpowiedź od AI

W standardowej bibliotece Go zaimplementowany jest główny typ wykluczenia wzajemnego: sync.Mutex. To prosty mutex, który zapewnia blokadę i odblokowanie w celu ochrony krytycznych sekcji kodu przed jednoczesnym dostępem.

Ponadto istnieje sync.RWMutex — rozszerzona wersja mutexa, która pozwala wielu czytelnikom na jednoczesne utrzymanie blokady, ale zapis jest blokowany wyłącznie.

Przykład użycia sync.Mutex:

var mu sync.Mutex
var counter int

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

I przykład z 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
}