Sobes.tech
Junior — Middle

Como é que os sistemas lidam com a situação em que vários threads acedem simultaneamente a uma variável ou estado comum?

sobes.tech IA

Resposta da IA

Quando vários threads acedem simultaneamente a uma variável ou estado comum, surge um problema de condição de corrida (race condition). Para evitar dados incorretos e garantir a correção, utilizam-se mecanismos de sincronização:

  • Bloqueios (lock, mutex) — permitem que um thread tenha acesso exclusivo ao recurso, enquanto outros aguardam.
  • Monitores (Monitor.Enter/Exit em C#) — mecanismo de bloqueio mais flexível.
  • Palavra-chave lock em C# — sintaxe simplificada para monitores.
  • Operações atômicas (Interlocked) — para operações simples sem bloqueio completo.
  • Coleções concorrentes — estruturas de dados seguras para múltiplos threads.

Exemplo usando lock em C#:

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

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

Este método garante que apenas um thread modifica a variável de cada vez.