Compare-and-swap, CAS (porównaj i zamień) – operacja atomowa stosowana w wielowątkowych procesach w celu synchronizacji. Jej działanie polega na porównaniu zawartości pewnej lokacji w pamięci z zadaną wartością a następnie, jeśli obie wartości są równe, jej zmodyfikowaniu do nowej wartości. Niepodzielność operacji zapewnia, że nowa wartość jest wyznaczona na podstawie aktualnych danych. Jeśli wartość zostałaby w międzyczasie zmodyfikowana przez inny wątek to zapis by się nie powiódł. Wynik operacji musi wskazywać, czy działanie zapisu zostało wykonane czy nie. Może to być prosty typ logiczny lub zwracanie wartości odczytanej z podanej lokacji (lecz nie zapisanej).
Historia Instrukcja compare-and-swap była integralną częścią architektury IBM 370 i jej następników począwszy od 1970 roku. Systemy operacyjne działające na tej architekturze intensywnie korzystały z tej instrukcji w celu uproszczenia procesów (zadań systemowych i zadań użytkownika) i przetwarzania równoległego przez eliminację, do najwyższego możliwego stopnia, „disabled spin locks”, które były zastosowane we wcześniejszych wersjach systemów operacyjnych IBM. W tych systemach operacyjnych nową jednostkę roboczą można było utworzyć „globalnie” lub „lokalnie” na liście serwisów przez wywołanie pojedynczej instrukcji CAS.