Sobes.tech
Junior — Middle

Existem estruturas de dados na linguagem Go que implementam operações sem usar bloqueios?

sobes.tech IA

Resposta da IA

Na linguagem Go, existem estruturas de dados e mecanismos para trabalhar sem usar bloqueios tradicionais (mutex). Os principais são:

  • Canais (channels) — permitem trocar dados de forma segura entre goroutines, garantindo sincronização sem bloqueios explícitos.

  • Pacote sync/atomic — fornece operações atômicas sobre variáveis (por exemplo, atomic.AddInt32), permitindo implementar algoritmos sem bloqueio.

  • Estruturas de dados lock-free — embora na biblioteca padrão do Go não existam estruturas lock-free prontas, é possível implementar filas e outras estruturas usando operações atômicas e canais.

Exemplo de uso de um contador atômico:

import (
    "fmt"
    "sync/atomic"
)

func main() {
    var counter int32 = 0
    atomic.AddInt32(&counter, 1)
    fmt.Println(counter) // 1
}

Assim, o Go oferece ferramentas para implementar estruturas concorrentes sem bloqueios, usando operações atômicas e canais.