C# · Intermediário · Inglês · Técnico
lock
Instrução que garante exclusão mútua: só uma thread por vez executa o bloco protegido por um objeto de bloqueio. A partir do .NET 9 há o tipo dedicado System.Threading.Lock.
Onde usar
Aparece ao proteger estado compartilhado, como um contador ou cache em memória. Mantenha o bloco curto e nunca faça await dentro dele: o compilador recusa, e segurar o lock durante I/O gera contenção.
Em código
private readonly Lock _trava = new();
private int _total;
public void Somar(int n)
{
lock (_trava) { _total += n; }
}Exemplos
Wrap the counter update in a lock.
Envolva a atualização do contador em um lock.
You can't await inside a lock.
Não dá para usar await dentro de um lock.
Cuidado
Não use lock(this) nem lock em string ou typeof: outros códigos podem bloquear o mesmo objeto e causar deadlocks.
Sinônimos
exclusão mútua, mutex