Sobes.tech
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:

  1. Bellek hücresinin mevcut değeri (expectedValue) okunur.
  2. Sadece mevcut değer expectedValue ile eşleşiyorsa, bu hücreye yeni bir değer (newValue) yazmaya çalışır.
  3. Bir boolean değer döner: true eğer yazma başarılıysa (yani eşleşme varsa), false aksi 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 AtomicStampedReference veya AtomicMarkableReference gibi sınıflar kullanılır.
  • Yüksek yarışta çok sayıda başarısız deneme (spin döngüleri) olabilir.