ExpertiDict

C# · Intermediário · Inglês · Técnico

lock

/lɑk/palavra-chave

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

Veja também

Todos os termos de C#