glib.Atomic.Atomic Class Reference

List of all members.

Detailed Description

Description The following functions can be used to atomically access integers and pointers.

They are implemented as inline assembler function on most platforms and use slower fall-backs otherwise. Using them can sometimes save you 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 You must not directly read integers or pointers concurrently accessed by multiple threads, but use the atomic accessor functions instead. That is, always use g_atomic_int_get() and g_atomic_pointer_get() for read outs. They provide the neccessary synchonization mechanisms like memory barriers to access memory locations concurrently. Note If you are using those functions for anything apart from simple reference counting, you should really be aware of the implications of doing that. There are literally thousands of ways to shoot yourself in the foot. So if in doubt, use a GMutex. If you don't know, what memory barriers are, do not use anything but g_atomic_int_inc() and g_atomic_int_dec_and_test(). Note It is not safe to set an integer or pointer just by assigning to it, when it is concurrently accessed by other threads with the following functions. Use g_atomic_int_compare_and_exchange() or g_atomic_pointer_compare_and_exchange() respectively.


Static Public Member Functions

static int intGet (int *atomic)
 Reads the value of the integer pointed to by atomic.
static void intSet (int *atomic, int newval)
 Sets the value of the integer pointed to by atomic.
static void intAdd (int *atomic, int val)
 Atomically adds val to the integer pointed to by atomic.
static int intExchangeAndAdd (int *atomic, int val)
 Atomically adds val to the integer pointed to by atomic.
static int intCompareAndExchange (int *atomic, int oldval, int newval)
 Compares oldval with the integer pointed to by atomic and if they are equal, atomically exchanges *atomic with newval.
static void * pointerGet (void **atomic)
 Reads the value of the pointer pointed to by atomic.
static void pointerSet (void **atomic, void *newval)
 Sets the value of the pointer pointed to by atomic.
static int pointerCompareAndExchange (void **atomic, void *oldval, void *newval)
 Compares oldval with the pointer pointed to by atomic and if they are equal, atomically exchanges *atomic with newval.
static void intInc (int *atomic)
 Atomically increments the integer pointed to by atomic by 1.
static int intDecAndTest (int *atomic)
 Atomically decrements the integer pointed to by atomic by 1.


Member Function Documentation

static void glib.Atomic.Atomic.intAdd ( int atomic,
int  val 
) [static]

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. Since 2.4

static int glib.Atomic.Atomic.intCompareAndExchange ( int atomic,
int  oldval,
int  newval 
) [static]

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. Since 2.4

static int glib.Atomic.Atomic.intDecAndTest ( int atomic  )  [static]

Atomically decrements the integer pointed to by atomic by 1.

atomic: a pointer to an integer. Returns: TRUE, if the integer pointed to by atomic is 0 after decrementing it. Since 2.4 See Also GMutex GLib mutual exclusions.

static int glib.Atomic.Atomic.intExchangeAndAdd ( int atomic,
int  val 
) [static]

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. Since 2.4

static int glib.Atomic.Atomic.intGet ( int atomic  )  [static]

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 Since 2.4

static void glib.Atomic.Atomic.intInc ( int atomic  )  [static]

Atomically increments the integer pointed to by atomic by 1.

atomic: a pointer to an integer. Since 2.4

static void glib.Atomic.Atomic.intSet ( int atomic,
int  newval 
) [static]

Sets the value of the integer pointed to by atomic.

Also acts as a memory barrier. atomic: a pointer to an integer newval: the new value Since 2.10

static int glib.Atomic.Atomic.pointerCompareAndExchange ( void **  atomic,
void *  oldval,
void *  newval 
) [static]

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. Since 2.4

static void* glib.Atomic.Atomic.pointerGet ( void **  atomic  )  [static]

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. Since 2.4

static void glib.Atomic.Atomic.pointerSet ( void **  atomic,
void *  newval 
) [static]

Sets the value of the pointer pointed to by atomic.

Also acts as a memory barrier. atomic: a pointer to a gpointer newval: the new value Since 2.10


SourceForge.net Logo DSource.org Logo digitalmars.com Logo