Middle+
Šta je mehanizam CAS (Compare-And-Swap)?
sobes.tech АИ
Одговор од АИ
Механизам Compare-And-Swap (CAS) је атомска машинска операција која се користи за имплементацију безблокирајуће синхронизације.
Принцип рада:
- Прочита текущу вредност ћелије меморије (expectedValue).
- Покушава да упише нову вредност (newValue) у ту ћелију само ако тренутна вредност одговара expectedValue.
- Враћа булеву вредност:
trueако је упис успешан (односно, постојала је подудараност),falseу супротном.
У Јави, 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) при високој конкуренцији.