Sobes.tech
Junior — Middle

Milyen típusú kölcsönös kizárások (Mutex) vannak implementálva a Go standard könyvtárában?

sobes.tech MI

Válasz az MI-től

A Go szabványos könyvtárában egy fő kölcsönös kizárási típust valósítottak meg: sync.Mutex. Ez egy egyszerű mutex, amely zárolást és feloldást biztosít a kritikus szekciók védelmére a párhuzamos hozzáférés ellen.

Ezenkívül létezik a sync.RWMutex — a mutex kiterjesztett változata, amely lehetővé teszi több olvasónak, hogy egyszerre tartsa a zárolást, de az írás kizárólagosan blokkolva van.

A sync.Mutex használatának példája:

var mu sync.Mutex
var counter int

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

És egy példa a sync.RWMutex-szel:

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
}