Ce este Interlocked în C#?
sobes.tech AI
Răspuns de la AI
Interlocked este o clasă în spațiul de nume System.Threading care oferă operații atomice pentru variabilele care pot fi partajate de mai multe fire de execuție. O operație atomică este o operație care fie se execută complet, fie nu se execută deloc, chiar și în cazul accesului concurent din mai multe fire.
Principalele operații atomice oferite de Interlocked sunt:
Increment: crește în mod atomic valoarea unei variabile de tipintsaulong.Decrement: scade în mod atomic valoarea unei variabile de tipintsaulong.Add: adaugă în mod atomic o valoare la o variabilă de tipintsaulong.Exchange: înlocuiește în mod atomic valoarea unei variabile cu una nouă și returnează valoarea anterioară. Este suportat pentru diferite tipuri, inclusivint,long,float,doubleși tipuri de referință.CompareExchange: compară în mod atomic valoarea unei variabile cu o valoare dată. Dacă sunt egale, înlocuiește valoarea variabilei cu una nouă. Returnează valoarea anterioară a variabilei. Este suportat pentru diferite tipuri, inclusivint,long,float,doubleși tipuri de referință.
Utilizarea Interlocked ajută la evitarea problemelor de curse de date (data races), care pot apărea atunci când se lucrează cu variabile comune din mai multe fire fără blocări. Acest lucru face ca codul să fie mai fiabil și mai performant în scenarii în care este necesar doar accesul atomic la o variabilă, deoarece Interlocked de obicei evită costurile asociate cu mutexurile sau blocările.
Exemplu de utilizare a Interlocked.Increment:
// Variabilă la care vor accesa mai multe fire
private int _counter = 0;
public void Method1()
{
// Creștere atomică sigură
Interlocked.Increment(ref _counter);
}
public void Method2()
{
// Creștere atomică sigură
Interlocked.Increment(ref _counter);
}