### Function

# GLib atomic_int_compare_and_exchange

since: 2.4

#### Declaration

    gboolean
    g_atomic_int_compare_and_exchange (
      volatile gint* atomic,
      gint oldval,
      gint newval
    )

#### Description

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.

While `atomic` has a `volatile` qualifier, this is a historical artifact and the pointer passed to it should not be `volatile`.

Available since: 2.4

#### Parameters

`atomic`

  Type: `volatile gint*`

  A pointer to a #gint or #guint.

  The data is owned by the caller of the function.

`oldval`

  Type: `gint`

  The value to compare with.

`newval`

  Type: `gint`

  The value to conditionally replace with.

#### Return value

Type: `gboolean`

`TRUE` if the exchange took place.