Sobes.tech
Junior — Middle

Que tipos de exclusões mútuas (Mutex) estão implementados na biblioteca padrão do Go?

sobes.tech IA

Resposta da IA

Na biblioteca padrão do Go, é implementado um tipo principal de exclusão mútua: sync.Mutex. É um mutex simples que garante bloqueio e desbloqueio para proteger seções críticas do código contra acessos simultâneos.

Além disso, existe o sync.RWMutex, uma versão estendida do mutex que permite a vários leitores manterem o bloqueio simultaneamente, mas a escrita é bloqueada de forma exclusiva.

Exemplo de uso de sync.Mutex:

var mu sync.Mutex
var counter int

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

E um exemplo com 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
}