Sobes.tech
Junior — Middle

Quais são os principais problemas que podem surgir ao processar dados simultaneamente em um ambiente multithreaded

sobes.tech IA

Resposta da IA

Problemas principais ao processar dados simultaneamente num ambiente multithread:

  • Corridas de dados (Data races): quando vários threads leem e escrevem os mesmos dados sem sincronização, levando a resultados imprevisíveis.

  • Deadlocks (Interbloqueios): situação em que dois ou mais threads esperam uns pelos outros, bloqueando recursos, e a execução para.

  • Fome (Starvation): quando um ou mais threads não conseguem acesso aos recursos devido a prioridades ou planeamento incorreto.

  • Imprevisibilidade da ordem de execução: devido ao paralelismo, a ordem das operações pode mudar, dificultando a depuração.

Em Go, para resolver esses problemas, frequentemente usam-se canais (channels) para troca segura de dados entre goroutines e primitivas de sincronização do pacote sync, como mutex.

Exemplo de uso de mutex em Go:

package main

import (
    "fmt"
    "sync"
)

func main() {
    var mu sync.Mutex
    contador := 0
    var wg sync.WaitGroup

    for i := 0; i < 5; i++ {
        wg.Add(1)
        go func() {
            defer wg.Done()
            mu.Lock()
            contador++
            mu.Unlock()
        }()
    }

    wg.Wait()
    fmt.Println("Contador:", contador)
}

Aqui, o mutex impede corridas de dados ao incrementar o contador por várias goroutines.