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 |