Sobes.tech
Middle
201
questionbank

Что такое Interlocked в C#?

Ответ от нейросети

sobes.tech AI

Interlocked - это класс в пространстве имен System.Threading, предоставляющий атомарные операции для переменных, которые могут совместно использоваться несколькими потоками. Атомарная операция - это операция, которая гарантированно выполняется полностью или не выполняется вовсе, даже при конкурентном доступе из разных потоков.

Основные атомарные операции, предоставляемые Interlocked:

  • Increment: Атомарно увеличивает значение переменной типа int или long.
  • Decrement: Атомарно уменьшает значение переменной типа int или long.
  • Add: Атомарно добавляет значение к переменной типа int или long.
  • Exchange: Атомарно заменяет значение переменной на новое и возвращает предыдущее значение. Поддерживается для различных типов, включая int, long, float, double и ссылочные типы.
  • CompareExchange: Атомарно сравнивает значение переменной с заданным значением. Если они равны, то заменяет значение переменной на новое. Возвращает предыдущее значение переменной. Поддерживается для различных типов, включая int, long, float, double и ссылочные типы.

Использование Interlocked позволяет избежать проблем конкуренции данных (data races), которые могут возникнуть при работе с общими переменными из разных потоков без блокировок. Это делает код более надежным и производительным в сценариях, где требуется только атомарный доступ к одной переменной, так как Interlocked обычно обходится без затрат на мьютексы или блокировки.

Пример использования Interlocked.Increment:

// Переменная, к которой будут обращаться несколько потоков
private int _counter = 0;

public void Method1()
{
    // Безопасное атомарное увеличение _counter
    Interlocked.Increment(ref _counter);
}

public void Method2()
{
    // Безопасное атомарное увеличение _counter
    Interlocked.Increment(ref _counter);
}