## GstAtomic

GstAtomic — Functions that implement atomic operations.

## Synopsis

    #include <gst/gst.h>

    typedef     gst_vgint;
                GstAtomicInt;
    void        gst_atomic_int_init             (GstAtomicInt *aint,
                                                 gint val);
    void        gst_atomic_int_destroy          (GstAtomicInt *aint);
    void        gst_atomic_int_set              (GstAtomicInt *aint,
                                                 gint val);
    gint        gst_atomic_int_read             (GstAtomicInt *aint);
    void        gst_atomic_int_add              (GstAtomicInt *aint,
                                                 gint val);
    void        gst_atomic_int_inc              (GstAtomicInt *aint);
    gboolean    gst_atomic_int_dec_and_test     (GstAtomicInt *aint);

## Description

Functions that implement atomic operations on a GstAtomicInt structure. Atomic operations are thread safe and don't use heavyweight locking mechanisms.

These functions will be inlined in the GStreamer core but are available to plugins as external methods.

## Details

### gst_vgint

    typedef volatile gint gst_vgint;	/* gtk-doc volatile workaround */

### GstAtomicInt

    typedef struct {
      gst_vgint     counter;
      GMutex	*lock;		/* for C fallback */
    } GstAtomicInt;

A structure that contains an integer that can be modified atomically.

### gst_atomic_int_init ()

    void        gst_atomic_int_init             (GstAtomicInt *aint,
                                                 gint val);

Initialize an allocated GstAtomicInt with a value. Call this method only once as it will allocate a mutex in the C-fallback case.

`aint` : | a GstAtomicInt
`val` : | a new value

### gst_atomic_int_destroy ()

    void        gst_atomic_int_destroy          (GstAtomicInt *aint);

Destroy a GstAtomicInt. Call this method only once as it will free the mutex in the C-fallback case.

`aint` : | a GstAtomicInt

### gst_atomic_int_set ()

    void        gst_atomic_int_set              (GstAtomicInt *aint,
                                                 gint val);

Atomically set the value on the GstAtomicInt.

`aint` : | a GstAtomicInt
`val` : | The new value

### gst_atomic_int_read ()

    gint        gst_atomic_int_read             (GstAtomicInt *aint);

Atomically read the contents of a GstAtomicInt

`aint` : | a GstAtomicInt
Returns : | the value of the atomic int

### gst_atomic_int_add ()

    void        gst_atomic_int_add              (GstAtomicInt *aint,
                                                 gint val);

Atomically add the given value to the GstAtomicInt.

`aint` : | a GstAtomicInt
`val` : | the value to add

### gst_atomic_int_inc ()

    void        gst_atomic_int_inc              (GstAtomicInt *aint);

Atomically increment the GstAtomicInt

`aint` : | a GstAtomicInt

### gst_atomic_int_dec_and_test ()

    gboolean    gst_atomic_int_dec_and_test     (GstAtomicInt *aint);

Atomically decrement the GstAtomicInt and test if it is zero.

`aint` : | a GstAtomicInt
Returns : | TRUE if the atomic int is 0

## See Also

GstMemChunk