Junior
Qual é a função da palavra-chave lock na linguagem C#?
sobes.tech IA
Resposta da IA
A palavra-chave lock é usada para sincronizar o acesso a recursos em aplicações multithread. Garante que apenas um thread pode executar o código dentro do bloco lock num dado momento.
Princípio de funcionamento:
lockaceita como argumento um objeto que é usado como mutex (monitor).- Antes de executar o código dentro do bloco
lock, o thread tenta obter um bloqueio exclusivo no objeto especificado. - Se o bloqueio estiver livre, o thread obtém-no e executa o código.
- Se o bloqueio estiver ocupado por outro thread, o thread atual fica bloqueado (passa para estado de espera) até que o bloqueio seja liberado.
- Ao sair do bloco
lock(mesmo em caso de exceção), o bloqueio é liberado automaticamente.
É usado para proteger recursos compartilhados, como campos de classes, coleções ou outros objetos aos quais vários threads podem aceder simultaneamente, para evitar condições de corrida e garantir a integridade dos dados.
Exemplo de uso:
public class SharedResource
{
private int _counter;
private readonly object _lockObject = new object(); // Objeto para sincronização
public void Increment()
{
lock (_lockObject) // Acesso exclusivo ao bloco de código
{
_counter++; // Alteração segura do recurso comum
}
}
public int GetCounter()
{
lock (_lockObject) // Acesso exclusivo também na leitura
{
return _counter;
}
}
}
Pontos importantes:
- O objeto para bloqueio deve ser de tipo referência e, geralmente, um campo privado (
readonly) para evitar interferência externa. - Evite bloquear tipos como
string,thisoutypeof(TypeName), pois podem ser usados em conjunto ou acessíveis de fora, o que pode levar a deadlocks ou funcionamento incorreto. locké açúcar sintático para usar os métodos da classeMonitor.