Middle+
Какво е механизма CAS (Compare-And-Swap)?
sobes.tech AI
Отговор от AI
Механизмът Compare-And-Swap (CAS) е атомна машинна операция, използвана за реализиране на безблокираща синхронизация.
Принцип на работа:
- Чете текущата стойност на паметната клетка (expectedValue).
- Опитва се да запише нова стойност (newValue) в тази клетка само ако текущата стойност съвпада с expectedValue.
- Връща булева стойност:
true, ако записът е успешен (т.е. имало е съвпадение),falseв противен случай.
В Java CAS е реализиран в класовете от пакета java.util.concurrent.atomic, например AtomicInteger, AtomicLong, AtomicReference.
Пример за използване на AtomicInteger:
// java
import java.util.concurrent.atomic.AtomicInteger;
public class CasExample {
private AtomicInteger count = new AtomicInteger(0);
public void increment() {
while (true) {
int expectedValue = count.get(); // Чете текущата стойност
int newValue = expectedValue + 1;
if (count.compareAndSet(expectedValue, newValue)) {
// Ако текущата стойност не се е променила от момента на четене,
// извършва записа и излиза от цикъла
break;
}
// Ако стойността се е променила, опитва отново
}
}
}
Предимства:
- Не блокиращ: нишките не блокират една друга, намалявайки разходите за превключване на контекста, особено при ниска конкуренция.
- Избягва проблемите с deadlock.
Недостатъци:
- Проблемът ABA: ако стойността на клетката се промени от A на B, а след това обратно на A, CAS ще счита, че не е имало промяна. За решаване на този проблем се използват класове като
AtomicStampedReferenceилиAtomicMarkableReference. - Може да възникне голям брой неуспешни опити (spin loops) при висока конкуренция.