Sobes.tech
Middle

Čo je Interlocked v C#?

sobes.tech AI

Odpoveď od AI

Interlocked je trieda v priestore mien System.Threading, ktorá poskytuje atómové operácie pre premenné, ktoré môžu byť zdieľané viacerými vláknami. Atómová operácia je taká, ktorá je garantovane vykonaná úplne alebo vôbec, aj pri konkurenčnom prístupe z rôznych vlákien.

Hlavné atómové operácie poskytované Interlocked sú:

  • Increment: atómovo zvyšuje hodnotu premennej typu int alebo long.
  • Decrement: atómovo znižuje hodnotu premennej typu int alebo long.
  • Add: atómovo pridáva hodnotu k premennej typu int alebo long.
  • Exchange: atómovo nahrádza hodnotu premennej novou a vracia predchádzajúcu hodnotu. Podporované pre rôzne typy, vrátane int, long, float, double a referenčných typov.
  • CompareExchange: atómovo porovná hodnotu premennej s danou hodnotou. Ak sú rovnaké, nahradí hodnotu premennej novou. Vráti predchádzajúcu hodnotu premennej. Podporované pre rôzne typy, vrátane int, long, float, double a referenčných typov.

Použitie Interlocked pomáha vyhnúť sa problémom s dátovými súťažami (data races), ktoré môžu nastať pri práci s spoločnými premennými z rôznych vlákien bez zámkov. To robí kód spoľahlivejším a efektívnejším v scenároch, kde je požadovaný len atómový prístup k jednej premennej, pretože Interlocked zvyčajne obchádza náklady na mutexy alebo zámky.

Príklad použitia Interlocked.Increment:

// Premenná, ku ktorej budú mať prístup viaceré vlákna
private int _counter = 0;

public void Method1()
{
    // Bezpečné atómové zvýšenie
    Interlocked.Increment(ref _counter);
}

public void Method2()
{
    // Bezpečné atómové zvýšenie
    Interlocked.Increment(ref _counter);
}