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.