Sobes.tech
Middle

Какво е Interlocked в C#?

sobes.tech AI

Отговор от 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()
{
    // Безопасно атомарно увеличаване
    Interlocked.Increment(ref _counter);
}

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