Sobes.tech
Middle

Czym jest Interlocked w C#?

sobes.tech AI

Odpowiedź od AI

Interlocked to klasa w przestrzeni nazw System.Threading, która zapewnia operacje atomowe dla zmiennych współdzielonych przez wiele wątków. Operacja atomowa to taka, która jest wykonywana w całości lub wcale, nawet przy równoczesnym dostępie z różnych wątków.

Główne operacje atomowe dostępne w Interlocked to:

  • Increment: atomowo zwiększa wartość zmiennej typu int lub long.
  • Decrement: atomowo zmniejsza wartość zmiennej typu int lub long.
  • Add: atomowo dodaje wartość do zmiennej typu int lub long.
  • Exchange: atomowo zamienia wartość zmiennej na nową i zwraca poprzednią wartość. Obsługiwane dla różnych typów, w tym int, long, float, double i typów referencyjnych.
  • CompareExchange: atomowo porównuje wartość zmiennej z podaną wartością. Jeśli są równe, zamienia wartość zmiennej na nową. Zwraca poprzednią wartość zmiennej. Obsługiwane dla różnych typów, w tym int, long, float, double i typów referencyjnych.

Użycie Interlocked pozwala uniknąć problemów z wyścigami danych (data races), które mogą wystąpić podczas pracy ze wspólnymi zmiennymi z różnych wątków bez blokad. To czyni kod bardziej niezawodnym i wydajnym w scenariuszach, gdzie wymagana jest tylko atomowa dostępność do jednej zmiennej, ponieważ Interlocked zazwyczaj unika kosztów związanych z mutexami lub blokadami.

Przykład użycia Interlocked.Increment:

// Zmienna, do której będą się odwoływać różne wątki
private int _counter = 0;

public void Method1()
{
    // Bezpieczne atomowe zwiększenie
    Interlocked.Increment(ref _counter);
}

public void Method2()
{
    // Bezpieczne atomowe zwiększenie
    Interlocked.Increment(ref _counter);
}