atomicPointerExchange

fnvoid * atomicPointerExchange(void * atomic = null, void * newval = null)

Sets the atomic to newval and returns the old value from atomic.

This exchange is done atomically.

Think of this operation as an atomic version of { tmp = *atomic; *atomic = val; return tmp; }.

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

Parameters

atomica pointer to a #gpointer-sized value
newvalthe value to replace with

Returns

the value of atomic before the exchange