Atomic.pointerCompareAndExchange

Compares @atomic to @oldval and, if equal, sets it to @newval. If @atomic was not equal to @oldval then no change occurs.

This compare and exchange is done atomically.

Think of this operation as an atomic version of { if (*atomic == oldval) { *atomic = newval; return TRUE; } else return FALSE; }.

This call acts as a full compiler and hardware memory barrier.

struct Atomic
static
bool
pointerCompareAndExchange
(
void* atomic
,
void* oldval
,
void* newval
)

Parameters

atomic void*

a pointer to a #gpointer-sized value

oldval void*

the value to compare with

newval void*

the value to conditionally replace with

Return: %TRUE if the exchange took place

Meta