Sobes.tech
Middle

O que são lock-ers em C#?

sobes.tech IA

Resposta da IA

lock em C# é utilizado para garantir o acesso exclusivo a um bloco de código. Garante que apenas uma thread possa executar esse bloco de cada vez, evitando condições de corrida (race conditions) ao trabalhar com recursos partilhados.

private static readonly object _lockObject = new object(); // Objeto para sincronização

public void AccessSharedResource()
{
    lock (_lockObject) // Bloqueio do objeto
    {
        // Seção crítica: código que requer acesso exclusivo
        // Trabalho com recurso partilhado (por exemplo, modificar uma variável)
    } // O bloqueio é liberado automaticamente ao sair do bloco
}

Alternativas e conceitos relacionados:

  • Monitor: Fornece um controlo mais granular sobre a sincronização, incluindo métodos Wait, Pulse, PulseAll.
  • Mutex: Usado para sincronização entre processos, bem como entre threads no mesmo processo.
  • Semaphore/SemaphoreSlim: Limita o número de threads que podem aceder simultaneamente a um recurso.
  • ReaderWriterLockSlim: Permite que múltiplas threads leiam simultaneamente, mas apenas uma possa escrever.

A escolha do mecanismo de bloqueio depende da tarefa de sincronização específica. lock é uma forma abreviada de usar Monitor.Enter e Monitor.Exit, e é adequado para a maioria dos casos simples de sincronização dentro de um mesmo processo.