Sobes.tech
Middle

O que é Interlocked em C#?

sobes.tech IA

Resposta da IA

Interlocked é uma classe no espaço de nomes System.Threading que fornece operações atômicas para variáveis que podem ser compartilhadas por vários threads. Uma operação atômica é uma operação que é garantidamente executada completamente ou não é executada, mesmo em acessos concorrentes de diferentes threads.

As principais operações atômicas fornecidas por Interlocked são:

  • Increment: aumenta de forma atômica o valor de uma variável do tipo int ou long.
  • Decrement: diminui de forma atômica o valor de uma variável do tipo int ou long.
  • Add: adiciona de forma atômica um valor a uma variável do tipo int ou long.
  • Exchange: substitui de forma atômica o valor de uma variável por um novo e retorna o valor anterior. É suportado para vários tipos, incluindo int, long, float, double e tipos de referência.
  • CompareExchange: compara de forma atômica o valor de uma variável com um valor dado. Se forem iguais, substitui o valor da variável por um novo. Retorna o valor anterior da variável. É suportado para vários tipos, incluindo int, long, float, double e tipos de referência.

O uso de Interlocked evita problemas de competição de dados (corridas de dados), que podem ocorrer ao trabalhar com variáveis compartilhadas de diferentes threads sem bloqueios. Isso torna o código mais confiável e eficiente em cenários onde apenas o acesso atômico a uma variável é necessário, pois Interlocked geralmente evita custos associados a mutex ou bloqueios.

Exemplo de uso de Interlocked.Increment:

// Variável que será acessada por vários threads
private int _counter = 0;

public void Method1()
{
    // Incremento atômico seguro de _counter
    Interlocked.Increment(ref _counter);
}

public void Method2()
{
    // Incremento atômico seguro de _counter
    Interlocked.Increment(ref _counter);
}