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