Compares atomic to oldval and, if equal, sets it to newval.
If atomic was not equal to oldval then no change occurs.
In any case the value of atomic before this operation is stored in preval.
This compare and exchange is done atomically.
Think of this operation as an atomic version of
{ *preval = *atomic; if (*atomic == oldval) { *atomic = newval; return TRUE; } else return FALSE; }.
This call acts as a full compiler and hardware memory barrier.
Compares
atomictooldvaland, if equal, sets it tonewval. Ifatomicwas not equal tooldvalthen no change occurs. In any case the value ofatomicbefore this operation is stored inpreval.This compare and exchange is done atomically.
Think of this operation as an atomic version of
{ *preval = *atomic; if (*atomic == oldval) { *atomic = newval; return TRUE; } else return FALSE; }.This call acts as a full compiler and hardware memory barrier.
See also
g_atomic_pointer_compare_and_exchange()