Sobes.tech
Middle

¿Qué es Interlocked en C#?

sobes.tech AI

Respuesta de la IA

Interlocked es una clase en el espacio de nombres System.Threading que proporciona operaciones atómicas para variables que pueden ser compartidas por varios hilos. Una operación atómica es aquella que se ejecuta completamente o no se ejecuta en absoluto, incluso en acceso concurrente desde diferentes hilos.

Las principales operaciones atómicas proporcionadas por Interlocked son:

  • Increment: Incrementa de forma atómica el valor de una variable de tipo int o long.
  • Decrement: Decrementa de forma atómica el valor de una variable de tipo int o long.
  • Add: Añade de forma atómica un valor a una variable de tipo int o long.
  • Exchange: Reemplaza de forma atómica el valor de una variable por uno nuevo y devuelve el valor anterior. Es compatible con varios tipos, incluyendo int, long, float, double y tipos de referencia.
  • CompareExchange: Compara de forma atómica el valor de una variable con un valor dado. Si son iguales, reemplaza el valor de la variable por uno nuevo. Devuelve el valor anterior de la variable. Es compatible con varios tipos, incluyendo int, long, float, double y tipos de referencia.

El uso de Interlocked evita problemas de competencia de datos (carreras de datos), que pueden ocurrir al trabajar con variables compartidas desde diferentes hilos sin bloqueos. Esto hace que el código sea más confiable y eficiente en escenarios donde solo se requiere acceso atómico a una variable, ya que Interlocked generalmente evita costos asociados a mutex o bloqueos.

Ejemplo de uso de Interlocked.Increment:

// Variable a la que accederán varios hilos
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);
}