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 egyintvagylongtípusú változó értékét.Decrement: atomikusan csökkenti egyintvagylongtípusú változó értékét.Add: atomikusan hozzáad egy értéket egyintvagylongtí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 azint,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 azint,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);
}