Sobes.tech
Junior — Middle

De que maneiras é possível garantir uma interação correta entre threads ao executar tarefas paralelas?

sobes.tech IA

Resposta da IA

Para uma interação correta dos threads ao executar tarefas paralelas em C#, pode usar as seguintes abordagens:

  • Bloqueios (lock) — a palavra-chave lock permite limitar o acesso a uma secção crítica do código, de modo que apenas um thread possa executá-la de cada vez.

  • Mutex e Semaphore — mecanismos de sincronização mais flexíveis que podem ser usados para gerir o acesso a recursos entre threads ou processos.

  • Monitor — uma classe que fornece métodos para bloquear e aguardar, semelhante a lock, mas com maior controlo.

  • Coleções concorrentes — por exemplo, ConcurrentDictionary, ConcurrentQueue, etc., que são seguras para acesso multi-thread sem sincronização adicional.

  • Interlocked — classe para operações atómicas sobre variáveis (por exemplo, incremento, decremento).

  • async/await e Task Parallel Library (TPL) — permitem escrever código assíncrono e paralelo, minimizando problemas de sincronização.

Exemplo de uso de lock:

private readonly object _locker = new object();
private int _counter = 0;

public void Increment()
{
    lock (_locker)
    {
        _counter++;
    }
}

Este método garante que, em chamadas paralelas ao método Increment, o valor de _counter será corretamente incrementado sem condições de corrida.