Sobes.tech
Junior — Middle

É possível realizar operações de bloqueio dentro de uma seção crítica?

sobes.tech IA

Resposta da IA

É possível realizar operações de bloqueio dentro de uma secção crítica em C#, mas requer cuidado. Uma secção crítica é uma trecho de código protegido por um bloqueio (por exemplo, usando lock) para evitar acessos simultâneos de diferentes threads.

Se dentro de uma secção crítica tentar adquirir outro bloqueio, há risco de deadlock, especialmente se a ordem de aquisição dos bloqueios não for controlada.

Recomenda-se:

  • Minimizar o tempo de retenção do bloqueio.
  • Evitar bloqueios aninhados ou garantir uma ordem fixa na sua aquisição.

Exemplo de código potencialmente perigoso:

private readonly object lockA = new object();
private readonly object lockB = new object();

void Method()
{
    lock (lockA)
    {
        // Dentro da secção crítica, tenta adquirir outro bloqueio
        lock (lockB)
        {
            // Trabalho com recursos
        }
    }
}

Se outro thread adquirir lockB e tentar obter lockA, ocorrerá deadlock.