Sobes.tech
Middle+

Šta je mehanizam CAS (Compare-And-Swap)?

sobes.tech АИ

Одговор од АИ

Механизам Compare-And-Swap (CAS) је атомска машинска операција која се користи за имплементацију безблокирајуће синхронизације.

Принцип рада:

  1. Прочита текущу вредност ћелије меморије (expectedValue).
  2. Покушава да упише нову вредност (newValue) у ту ћелију само ако тренутна вредност одговара expectedValue.
  3. Враћа булеву вредност: 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) при високој конкуренцији.