Sobes.tech
Junior — Middle

Jaké typy vzájemných vyloučení (Mutex) jsou implementovány v standardní knihovně Go?

sobes.tech AI

Odpověď od AI

V knihovně standardního Go je implementován hlavní typ vzájemného vyloučení: sync.Mutex. Jedná se o jednoduchý mutex, který zajišťuje zámek a odemknutí pro ochranu kritických sekcí kódu před současným přístupem.

Kromě toho existuje sync.RWMutex — rozšířená verze mutexu, která umožňuje více čtenářům současně držet zámek, ale zápis je blokován výhradně.

Příklad použití sync.Mutex:

var mu sync.Mutex
var counter int

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

A pří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
}