Middle
Czym jest Interlocked w C#?
sobes.tech AI
Odpowiedź od AI
Interlocked to klasa w przestrzeni nazw System.Threading, która zapewnia operacje atomowe dla zmiennych współdzielonych przez wiele wątków. Operacja atomowa to taka, która jest wykonywana w całości lub wcale, nawet przy równoczesnym dostępie z różnych wątków.
Główne operacje atomowe dostępne w Interlocked to:
Increment: atomowo zwiększa wartość zmiennej typuintlublong.Decrement: atomowo zmniejsza wartość zmiennej typuintlublong.Add: atomowo dodaje wartość do zmiennej typuintlublong.Exchange: atomowo zamienia wartość zmiennej na nową i zwraca poprzednią wartość. Obsługiwane dla różnych typów, w tymint,long,float,doublei typów referencyjnych.CompareExchange: atomowo porównuje wartość zmiennej z podaną wartością. Jeśli są równe, zamienia wartość zmiennej na nową. Zwraca poprzednią wartość zmiennej. Obsługiwane dla różnych typów, w tymint,long,float,doublei typów referencyjnych.
Użycie Interlocked pozwala uniknąć problemów z wyścigami danych (data races), które mogą wystąpić podczas pracy ze wspólnymi zmiennymi z różnych wątków bez blokad. To czyni kod bardziej niezawodnym i wydajnym w scenariuszach, gdzie wymagana jest tylko atomowa dostępność do jednej zmiennej, ponieważ Interlocked zazwyczaj unika kosztów związanych z mutexami lub blokadami.
Przykład użycia Interlocked.Increment:
// Zmienna, do której będą się odwoływać różne wątki
private int _counter = 0;
public void Method1()
{
// Bezpieczne atomowe zwiększenie
Interlocked.Increment(ref _counter);
}
public void Method2()
{
// Bezpieczne atomowe zwiększenie
Interlocked.Increment(ref _counter);
}