Atomic Operations — used to automatically access integers and pointers
glib.lib
#include <glib.h>
gint g_atomic_int_get (gint *atomic);
void g_atomic_int_add (gint *atomic, gint val);
gint g_atomic_int_exchange_and_add (gint *atomic, gint val);
gboolean g_atomic_int_compare_and_exchange (gint *atomic, gint oldval, gint newval);
gpointer g_atomic_pointer_get (gpointer *atomic);
gboolean g_atomic_pointer_compare_and_exchange (gpointer *atomic, gpointer oldval, gpointer newval);
void g_atomic_int_inc (gint *atomic);
gboolean g_atomic_int_dec_and_test (gint *atomic);
The following functions can be used to automatically access integers and pointers. They are implemented as inline assembler functions on most platforms and use slower fall-backs otherwise. Using them can sometimes save the user from using a performance-expensive GMutex to protect the integer or pointer.
The most important usage is reference counting. Using
g_atomic_int_inc()
and g_atomic_int_dec_and_test()
makes reference
counting a very fast operation.
Note: Do not directly read
integers or pointers concurrently accessed by other threads with
the following functions directly. Always use
|
gint g_atomic_int_get (gint *atomic);
Reads the value of the integer pointed to by atomic
.
Also acts as a memory barrier.
atomic : |
a pointer to an integer. |
Returns : | the value of *atomic .
|
void g_atomic_int_add (gint *atomic, gint val);
Atomically adds val
to the integer
pointed to by atomic
. Also acts as a
memory barrier.
atomic : |
a pointer to an integer. |
val : |
the value to add to *atomic .
|
gint g_atomic_int_exchange_and_add (gint *atomic, gint val);
Atomically adds val
to the integer
pointed to by atomic
. It returns the
value of *atomic
just before the
addition took place. Also acts as a memory barrier.
atomic : |
a pointer to an integer. |
val : |
the value to add to *atomic .
|
Returns : | the value of *atomic
before the addition.
|
gboolean g_atomic_int_compare_and_exchange (gint *atomic, gint oldval, gint newval);
Compares oldval
with the integer pointed
to by atomic
and if they are equal, atomically exchanges *atomic
with newval
. Also acts as a memory
barrier.
atomic : |
a pointer to an integer. |
oldval : |
the assumed old value of *atomic .
|
newval : |
the new value of *atomic .
|
Returns : | TRUE , if *atomic
was equal oldval . FALSE otherwise.
|
gpointer g_atomic_pointer_get (gpointer *atomic);
Reads the value of the pointer pointed to by atomic
.
Also acts as a memory barrier.
atomic : |
a pointer to a gpointer. |
Returns : | the value to add to *atomic .
|
gboolean g_atomic_pointer_compare_and_exchange (gpointer *atomic, gpointer oldval, gpointer newval);
Compares oldval
with the pointer pointed
to by atomic
and if they are equal, atomically exchanges *atomic
with newval
. Also acts as a memory
barrier.
atomic : |
a pointer to a gpointer. |
oldval : |
the assumed old value of *atomic .
|
newval : |
the new value of *atomic .
|
Returns : | TRUE , if *atomic
was equal oldval . FALSE otherwise.
|
void g_atomic_int_inc (gint *atomic);
Atomically increments the integer pointed to by
atomic
by 1.
atomic : |
a pointer to an integer. |
For additional information or queries on this page send feedback
© 2005-2007 Nokia |