Что такое 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);
}