Bildirim
_Bool atomic_compare_exchange_strong(volatile A *obj, C *exp, C des); (C11)
_Bool atomic_compare_exchange_weak(volatile A *obj, C *exp, C des); (C11)
_Bool atomic_compare_exchange_strong_explicit(volatile A *obj, C *exp, C des, memory_order succ, memory_order fail); (C11)
_Bool atomic_compare_exchange_weak_explicit(volatile A *obj, C *exp, C des, memory_order succ, memory_order fail); (C11)
Açıklama
Obj parametresi ile gösterilen bellek içeriğini exp ile gösterilen bellek içeriği ile Atomik olarak karşılaştırır. Eğer bitsel olarak eşitse, önceki bellek içeriğini des parametresi ile gösterilen değerlerle değiştirir (okuma-değiştirme-yazma işlemi ile). Aksi takdirde, obj parametresi ile gösterilen gerçek bellek içeriğini exp parametresi ile gösterilen değişkene yükler.
Okuma-değiştirme-yazma ve yükleme işlemleri için bellek modelleri sırasıyla succ ve fail olarak kendini gösterir.
Fonksiyonların weak sürümlerinin sahte bir şekilde başarısız olmasına izin verilir, yani eşit olsalar bile *obj!=*exp denklemi sağlanmış gibi davranırlar.
Parametreler
obj: Test edilecek ve değiştirilecek atomik değişken işaretçisidir.
exp: Atomik değişkende bulunması beklenen değeri gösteren bir işaretçidir.
des: Eğer beklendiği gibi ise, atomik değişkene yüklenecek değeri gösterir.
succ: Karşılaştırma başarılı olursa, okuma-değiştirme-yazma işlemleri için bellek senkronizasyon sıralamasını gösterir.
fail: Karşılaştırma başarısız olursa, yükleme işlemi için bellek senkronizasyon sıralamasını gösterir.
Dönüş değeri
Eğer obj değeri exp değerine eşit ise TRUE, aksi takdirde FALSE bir değer geri döndürülür.