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
lockpermite 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.