Sobes.tech
Middle+

Mis on CAS-mehhanism (Compare-And-Swap)?

sobes.tech AI

Vastus AI-lt

Compare-And-Swap (CAS) mehhanism on atomaarne masinatoiming, mida kasutatakse lukustamata sünkroniseerimise rakendamiseks.

Tööpõhimõte:

  1. Loeb praeguse väärtuse mälupesast (expectedValue).
  2. Püüab kirjutada uue väärtuse (newValue) ainult juhul, kui praegune väärtus vastab expectedValue-le.
  3. Tagastab loogilise väärtuse: true, kui kirjutamine õnnestus (st. vastavus), false muul juhul.

Java-s on CAS realiseeritud java.util.concurrent.atomic paketi klassides, näiteks AtomicInteger, AtomicLong, AtomicReference.

Näide kasutades 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(); // Loeb praeguse väärtuse
            int newValue = expectedValue + 1;
            if (count.compareAndSet(expectedValue, newValue)) {
                // Kui praegune väärtus ei ole muutunud alates lugemisest,
                // kirjutab ja väljub tsüklist
                break;
            }
            // Kui väärtus muutus, proovib uuesti
        }
    }
}

Eelised:

  • Mitteblokiv: voogedastid ei blokeeri üksteist, vähendades kontekstivahetuse kulusid, eriti madala konkurentsi korral.
  • Vältib deadlock-tingimusi.

Puudused:

  • ABA probleem: kui mälupesaväärtus muutub A-st B-sse ja siis tagasi A-sse, arvab CAS, et muudatusi ei olnud. Selle probleemi lahendamiseks kasutatakse AtomicStampedReference või AtomicMarkableReference klasse.
  • Võib tekkida palju ebaõnnestunud katseid (spin loops) suure konkurentsi korral.