Sobes.tech
Middle

Mi az az Interlocked a C#-ban?

sobes.tech MI

Válasz az MI-től

Interlocked a System.Threading névtérben található osztály, amely atomikus műveleteket biztosít olyan változók számára, amelyeket több szál is megoszthat. Az atomikus művelet olyan, amely teljes egészében végrehajtódik vagy egyáltalán nem, még akkor is, ha különböző szálakból történő konkurens hozzáférés van.

Az Interlocked által biztosított főbb atomikus műveletek a következők:

  • Increment: atomikusan növeli egy int vagy long típusú változó értékét.
  • Decrement: atomikusan csökkenti egy int vagy long típusú változó értékét.
  • Add: atomikusan hozzáad egy értéket egy int vagy long típusú változóhoz.
  • Exchange: atomikusan lecseréli egy változó értékét egy újszerűre, és visszaadja az előző értéket. Támogatott különböző típusokra, beleértve az int, long, float, double és referencia típusokat.
  • CompareExchange: atomikusan összehasonlítja egy változó értékét egy adott értékkel. Ha egyeznek, akkor a változó értékét egy újszerű értékre cseréli. Visszaadja az előző értéket. Támogatott különböző típusokra, beleértve az int, long, float, double és referencia típusokat.

Az Interlocked használata segít elkerülni az adatszivárgás problémákat (data races), amelyek akkor fordulhatnak elő, ha több szál dolgozik ugyanazon változóval blokkolások nélkül. Ez a kódot megbízhatóbbá és hatékonyabbá teszi olyan forgatókönyvekben, ahol csak egy változó atomikus hozzáférése szükséges, mivel az Interlocked általában elkerüli a mutexek vagy zárolások költségeit.

Az Interlocked.Increment példája:

// Változó, amelyhez több szál fog hozzáférni
private int _counter = 0;

public void Method1()
{
    // Biztonságos atomikus növelés
    Interlocked.Increment(ref _counter);
}

public void Method2()
{
    // Biztonságos atomikus növelés
    Interlocked.Increment(ref _counter);
}