Sobes.tech
Junior — Middle

Aké typy vzájomného vylúčenia (Mutex) sú implementované v štandardnej knižnici Go?

sobes.tech AI

Odpoveď od AI

V štandardnej knižnici Go je implementovaný hlavný typ vzájomného vylúčenia: sync.Mutex. Je to jednoduchý mutex, ktorý zabezpečuje zámok a odomknutie na ochranu kritických sekcií kódu pred súčasným prístupom.

Okrem toho existuje sync.RWMutex — rozšírená verzia mutexu, ktorá umožňuje viacerým čitateľom držať zámok súčasne, ale zápis je blokovaný výlučne.

Príklad použitia sync.Mutex:

var mu sync.Mutex
var counter int

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

A príklad s 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
}