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:
- Loeb praeguse väärtuse mälupesast (expectedValue).
- Püüab kirjutada uue väärtuse (newValue) ainult juhul, kui praegune väärtus vastab expectedValue-le.
- Tagastab loogilise väärtuse:
true, kui kirjutamine õnnestus (st. vastavus),falsemuul 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
AtomicStampedReferencevõiAtomicMarkableReferenceklasse. - Võib tekkida palju ebaõnnestunud katseid (spin loops) suure konkurentsi korral.