Sobes.tech
Middle+

CAS (Compare-And-Swap) mexanizmi nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Compare-And-Swap (CAS) mexanizmi — bu atomik mashina əməliyyatı olub, kilidsiz sinxronizasiya həyata keçirmək üçün istifadə olunur.

İş prinsipi:

  1. Yaddaş hüceyrəsinin hazırkı dəyəri (expectedValue) oxunur.
  2. Yalnız hazırkı dəyər expectedValue-ə uyğun gəlirsə, ona yeni dəyər (newValue) yazmağa çalışır.
  3. Boolean dəyər qaytarır: true əgər yazma uğurludursa (yəni, uyğunluq olubsa), false əks halda.

Java-da CAS java.util.concurrent.atomic paketindəki sinflərdə həyata keçirilmişdir, məsələn, AtomicInteger, AtomicLong, AtomicReference.

AtomicInteger istifadə nümunəsi:

// 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(); // Mövcud dəyəri oxuyur
            int newValue = expectedValue + 1;
            if (count.compareAndSet(expectedValue, newValue)) {
                // Əgər mövcud dəyər oxunandan bəri dəyişməyibsə,
                // yazma əməliyyatını həyata keçirir və dövrü tərk edir
                break;
            }
            // Dəyər dəyişibsə, yenidən cəhd edir
        }
    }
}

Üstünlüklər:

  • Bloklamayan: iplar bir-birini bloklamır, bu da kontekst dəyişmə xərclərini azaldır, xüsusən aşağı yarışda.
  • Deadlock (ölümbətlik) problemlərindən qaçınır.

Çatışmazlıqlar:

  • ABA problemi: əgər hüceyrənin dəyəri A-dan B-yə dəyişirsə və sonra yenidən A-ya qayıdırsa, CAS dəyişiklik olmadığını düşünəcək. Bu problemi həll etmək üçün AtomicStampedReference və ya AtomicMarkableReference kimi sinflər istifadə olunur.
  • Yüksək yarışda çox sayda uğursuz cəhdlər (spin loops) baş verə bilər.