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:
- Yaddaş hüceyrəsinin hazırkı dəyəri (expectedValue) oxunur.
- Yalnız hazırkı dəyər expectedValue-ə uyğun gəlirsə, ona yeni dəyər (newValue) yazmağa çalışır.
- 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
AtomicStampedReferencevə yaAtomicMarkableReferencekimi sinflər istifadə olunur. - Yüksək yarışda çox sayda uğursuz cəhdlər (spin loops) baş verə bilər.