Middle+
CAS (Compare-And-Swap) mekanizması nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Compare-And-Swap (CAS) mekanizması, kilitlenmeyen senkronizasyonu uygulamak için kullanılan atomik makine işlemi.
Çalışma prensibi:
- Bellek hücresinin mevcut değeri (expectedValue) okunur.
- Sadece mevcut değer expectedValue ile eşleşiyorsa, bu hücreye yeni bir değer (newValue) yazmaya çalışır.
- Bir boolean değer döner:
trueeğer yazma başarılıysa (yani eşleşme varsa),falseaksi takdirde.
Java'da CAS, java.util.concurrent.atomic paketindeki sınıflarda uygulanmıştır, örneğin, AtomicInteger, AtomicLong, AtomicReference.
AtomicInteger kullanım örneği:
// 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(); // Mevcut değeri okur
int newValue = expectedValue + 1;
if (count.compareAndSet(expectedValue, newValue)) {
// Eğer mevcut değer okuma anından beri değişmediyse,
// yazma işlemini yapar ve döngüden çıkar
break;
}
// Değer değiştiyse, tekrar dene
}
}
}
Avantajlar:
- Kilitlenmeyen: İşlemler birbirini engellemez, bu da bağlam değiştirme maliyetlerini azaltır, özellikle düşük yarışta.
- Deadlock (kilitlenme) sorunlarını önler.
Dezavantajlar:
- ABA problemi: hücrenin değeri A'dan B'ye, sonra tekrar A'ya değişirse, CAS değişiklik olmadığını düşünebilir. Bu sorunu çözmek için
AtomicStampedReferenceveyaAtomicMarkableReferencegibi sınıflar kullanılır. - Yüksek yarışta çok sayıda başarısız deneme (spin döngüleri) olabilir.