qbatomic.h man page on Scientific

Man page or keyword search:  
man Server   26626 pages
apropos Keyword Search (all sections)
Output format
Scientific logo
[printable version]

qbatomic.h(3)			     libqb			 qbatomic.h(3)

NAME
       qbatomic.h -

       Basic atomic integer and pointer operations.

SYNOPSIS
       #include <stdint.h>
       #include <qb/qbdefs.h>
       #include <qb/qbconfig.h>

   Defines
       #define qb_atomic_int_get(atomic)   ((int32_t)*(atomic))
       #define qb_atomic_int_set(atomic, newval)   ((void) (*(atomic) =
	   (newval)))
       #define qb_atomic_pointer_get(atomic)   ((void*)*(atomic))
       #define qb_atomic_pointer_set(atomic, newval)   ((void*) (*(atomic) =
	   (newval)))
       #define qb_atomic_int_inc(atomic)   (qb_atomic_int_add ((atomic), 1))
	   Atomically increments the integer pointed to by atomic by 1.
       #define qb_atomic_int_dec_and_test(atomic)
	   (qb_atomic_int_exchange_and_add ((atomic), -1) == 1)
	   Atomically decrements the integer pointed to by atomic by 1.

   Functions
       void qb_atomic_init (void)
       int32_t qb_atomic_int_exchange_and_add (volatile int32_t
	   QB_GNUC_MAY_ALIAS *atomic, int32_t val)
	   Atomically adds val to the integer pointed to by atomic.
       void qb_atomic_int_add (volatile int32_t QB_GNUC_MAY_ALIAS *atomic,
	   int32_t val)
	   Atomically adds val to the integer pointed to by atomic.
       int32_t qb_atomic_int_compare_and_exchange (volatile int32_t
	   QB_GNUC_MAY_ALIAS *atomic, int32_t oldval, int32_t newval)
	   Compares oldval with the integer pointed to by atomic and if they
	   are equal, atomically exchanges *atomic with newval.
       int32_t qb_atomic_pointer_compare_and_exchange (volatile void
	   *QB_GNUC_MAY_ALIAS *atomic, void *oldval, void *newval)
	   Compares oldval with the pointer pointed to by atomic and if they
	   are equal, atomically exchanges *atomic with newval.
       int32_t qb_atomic_int_get (volatile int32_t QB_GNUC_MAY_ALIAS *atomic)
	   Reads the value of the integer pointed to by atomic.
       void qb_atomic_int_set (volatile int32_t QB_GNUC_MAY_ALIAS *atomic,
	   int32_t newval)
	   Sets the value of the integer pointed to by atomic.
       void * qb_atomic_pointer_get (volatile void *QB_GNUC_MAY_ALIAS *atomic)
	   Reads the value of the pointer pointed to by atomic.
       void qb_atomic_pointer_set (volatile void *QB_GNUC_MAY_ALIAS *atomic,
	   void *newval)
	   Sets the value of the pointer pointed to by atomic.

Detailed Description
       Basic atomic integer and pointer operations.

       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 pthread_mutex to protect
       the integer or pointer.

       The most important usage is reference counting. Using
       qb_atomic_int_inc() and qb_atomic_int_dec_and_test() makes reference
       counting a very fast operation.

       You must not directly read integers or pointers concurrently accessed
       by multiple threads, but use the atomic accessor functions instead.
       That is, always use qb_atomic_int_get() and qb_atomic_pointer_get() for
       read outs. They provide the neccessary synchonization mechanisms like
       memory barriers to access memory locations concurrently.

       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 pthread_mutex. If you don't know, what
       memory barriers are, do not use anything but qb_atomic_int_inc() and
       qb_atomic_int_dec_and_test().

       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 qb_atomic_int_compare_and_exchange() or
       qb_atomic_pointer_compare_and_exchange() respectively.

Define Documentation
   #define qb_atomic_int_dec_and_test(atomic)
       (qb_atomic_int_exchange_and_add ((atomic), -1) == 1)
       Atomically decrements the integer pointed to by atomic by 1.
       Parameters:
	   atomic a pointer to an integer

       Returns:
	   QB_TRUE if the integer pointed to by atomic is 0 after decrementing
	   it

   #define qb_atomic_int_get(atomic)   ((int32_t)*(atomic))
   #define qb_atomic_int_inc(atomic)   (qb_atomic_int_add ((atomic), 1))
       Atomically increments the integer pointed to by atomic by 1.
       Parameters:
	   atomic a pointer to an integer.

   #define qb_atomic_int_set(atomic, newval)   ((void) (*(atomic) = (newval)))
   #define qb_atomic_pointer_get(atomic)   ((void*)*(atomic))
   #define qb_atomic_pointer_set(atomic, newval)   ((void*) (*(atomic) =
       (newval)))
Function Documentation
   void qb_atomic_init (void)
   void qb_atomic_int_add (volatile int32_t QB_GNUC_MAY_ALIAS * atomic,
       int32_t val)
       Atomically adds val to the integer pointed to by atomic. Also acts as a
       memory barrier.

       Parameters:
	   atomic a pointer to an integer
	   val the value to add to *atomic

   int32_t qb_atomic_int_compare_and_exchange (volatile int32_t
       QB_GNUC_MAY_ALIAS * atomic, int32_t oldval, int32_t 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.

       Parameters:
	   atomic a pointer to an integer
	   oldval the assumed old value of *atomic
	   newval the new value of *atomic

       Returns:
	   QB_TRUE, if *atomic was equal oldval. QB_FALSE otherwise.

   int32_t qb_atomic_int_exchange_and_add (volatile int32_t QB_GNUC_MAY_ALIAS
       * atomic, int32_t 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.

       Parameters:
	   atomic a pointer to an integer
	   val the value to add to *atomic

       Returns:
	   the value of *atomic before the addition.

   int32_t qb_atomic_int_get (volatile int32_t QB_GNUC_MAY_ALIAS * atomic)
       Reads the value of the integer pointed to by atomic. Also acts as a
       memory barrier.

       Parameters:
	   atomic a pointer to an integer

       Returns:
	   the value of atomic

   void qb_atomic_int_set (volatile int32_t QB_GNUC_MAY_ALIAS * atomic,
       int32_t newval)
       Sets the value of the integer pointed to by atomic. Also acts as a
       memory barrier.

       Parameters:
	   atomic a pointer to an integer
	   newval the new value

   int32_t qb_atomic_pointer_compare_and_exchange (volatile void
       *QB_GNUC_MAY_ALIAS * atomic, void * oldval, void * 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.

       Parameters:
	   atomic a pointer to a void*
	   oldval the assumed old value of *atomic
	   newval the new value of *atomic

       Returns:
	   QB_TRUE if atomic was equal oldval, else QB_FALSE.

   void* qb_atomic_pointer_get (volatile void *QB_GNUC_MAY_ALIAS * atomic)
       Reads the value of the pointer pointed to by atomic. Also acts as a
       memory barrier.

       Parameters:
	   atomic a pointer to a void*.

       Returns:
	   the value to add to atomic.

   void qb_atomic_pointer_set (volatile void *QB_GNUC_MAY_ALIAS * atomic, void
       * newval)
       Sets the value of the pointer pointed to by atomic. Also acts as a
       memory barrier.

       Parameters:
	   atomic a pointer to a void*
	   newval the new value

Author
       Generated automatically by Doxygen for libqb from the source code.

Version 0.16.0			  21 Nov 2013			 qbatomic.h(3)
[top]

List of man pages available for Scientific

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net