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|gpointer-sized] value

oldval void*

the value to compare with

newval void*

the value to conditionally replace with

Return Value

Type: bool

TRUE if the exchange took place

Meta