Sobes.tech
Junior — Middle

Como podem eliminar as condições de corrida que surgem ao aceder simultaneamente a recursos num ambiente multithread?

sobes.tech IA

Resposta da IA

Para evitar condições de corrida em ambientes multithread em Go, podem ser utilizados vários métodos:

  1. Mutexes (sync.Mutex) — bloqueiam o acesso a recursos partilhados, permitindo que apenas uma goroutine trabalhe com eles de cada vez.

  2. Canais (channels) — permitem organizar uma troca segura de dados entre goroutines, evitando o acesso direto a variáveis comuns.

  3. Pacote sync/atomic — fornece operações atômicas para trabalhar com tipos primitivos, ajudando a evitar condições de corrida em operações simples.

Exemplo com mutex:

import (
    "sync"
)

var mu sync.Mutex
var counter int

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

Uso de canais:

ch := make(chan int)

func worker() {
    for val := range ch {
        // processamento de val
    }
}

func main() {
    go worker()
    ch <- 42
    close(ch)
}

A escolha do método depende da tarefa específica e da estrutura do programa.