Sobes.tech
Middle+

Какво е механизма CAS (Compare-And-Swap)?

sobes.tech AI

Отговор от AI

Механизмът Compare-And-Swap (CAS) е атомна машинна операция, използвана за реализиране на безблокираща синхронизация.

Принцип на работа:

  1. Чете текущата стойност на паметната клетка (expectedValue).
  2. Опитва се да запише нова стойност (newValue) в тази клетка само ако текущата стойност съвпада с expectedValue.
  3. Връща булева стойност: 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) при висока конкуренция.