|
Packit |
ae235b |
|
|
Packit |
ae235b |
<html>
|
|
Packit |
ae235b |
<head>
|
|
Packit |
ae235b |
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
|
Packit |
ae235b |
<title>Atomic Operations: GLib Reference Manual</title>
|
|
Packit |
ae235b |
<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
|
|
Packit |
ae235b |
<link rel="home" href="index.html" title="GLib Reference Manual">
|
|
Packit |
ae235b |
<link rel="up" href="glib-fundamentals.html" title="GLib Fundamentals">
|
|
Packit |
ae235b |
<link rel="prev" href="glib-Miscellaneous-Macros.html" title="Miscellaneous Macros">
|
|
Packit |
ae235b |
<link rel="next" href="glib-core.html" title="GLib Core Application Support">
|
|
Packit |
ae235b |
<meta name="generator" content="GTK-Doc V1.27 (XML mode)">
|
|
Packit |
ae235b |
<link rel="stylesheet" href="style.css" type="text/css">
|
|
Packit |
ae235b |
</head>
|
|
Packit |
ae235b |
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Top |
|
|
Packit |
ae235b |
Description
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Atomic Operations
|
|
Packit |
ae235b |
Atomic Operations — basic atomic integer and pointer operations
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Functions
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
gint
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
g_atomic_int_get ()
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
void
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
g_atomic_int_set ()
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
void
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
g_atomic_int_inc ()
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
gboolean
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
g_atomic_int_dec_and_test ()
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
gboolean
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
g_atomic_int_compare_and_exchange ()
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
gint
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
g_atomic_int_add ()
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
guint
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
g_atomic_int_and ()
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
guint
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
g_atomic_int_or ()
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
guint
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
g_atomic_int_xor ()
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
gpointer
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
g_atomic_pointer_get ()
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
void
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
g_atomic_pointer_set ()
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
gboolean
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
g_atomic_pointer_compare_and_exchange ()
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
gssize
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
g_atomic_pointer_add ()
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
gsize
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
g_atomic_pointer_and ()
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
gsize
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
g_atomic_pointer_or ()
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
gsize
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
g_atomic_pointer_xor ()
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
gint
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
g_atomic_int_exchange_and_add ()
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Types and Values
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
#define
|
|
Packit |
ae235b |
G_ATOMIC_LOCK_FREE
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Includes
|
|
Packit |
ae235b |
#include <glib.h>
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Description
|
|
Packit |
ae235b |
The following is a collection of compiler macros to provide atomic
|
|
Packit |
ae235b |
access to integer and pointer-sized values.
|
|
Packit |
ae235b |
The macros that have 'int' in the name will operate on pointers to
|
|
Packit |
ae235b |
gint and guint. The macros with 'pointer' in the name will operate
|
|
Packit |
ae235b |
on pointers to any pointer-sized value, including gsize. There is
|
|
Packit |
ae235b |
no support for 64bit operations on platforms with 32bit pointers
|
|
Packit |
ae235b |
because it is not generally possible to perform these operations
|
|
Packit |
ae235b |
atomically.
|
|
Packit |
ae235b |
The get, set and exchange operations for integers and pointers
|
|
Packit |
ae235b |
nominally operate on gint and gpointer, respectively. Of the
|
|
Packit |
ae235b |
arithmetic operations, the 'add' operation operates on (and returns)
|
|
Packit |
ae235b |
signed integer values (gint and gssize) and the 'and', 'or', and
|
|
Packit |
ae235b |
'xor' operations operate on (and return) unsigned integer values
|
|
Packit |
ae235b |
(guint and gsize).
|
|
Packit |
ae235b |
All of the operations act as a full compiler and (where appropriate)
|
|
Packit |
ae235b |
hardware memory barrier. Acquire and release or producer and
|
|
Packit |
ae235b |
consumer barrier semantics are not available through this API.
|
|
Packit |
ae235b |
It is very important that all accesses to a particular integer or
|
|
Packit |
ae235b |
pointer be performed using only this API and that different sizes of
|
|
Packit |
ae235b |
operation are not mixed or used on overlapping memory regions. Never
|
|
Packit |
ae235b |
read or assign directly from or to a value -- always use this API.
|
|
Packit |
ae235b |
For simple reference counting purposes you should use
|
|
Packit |
ae235b |
g_atomic_int_inc() and g_atomic_int_dec_and_test() . Other uses that
|
|
Packit |
ae235b |
fall outside of simple reference counting patterns are prone to
|
|
Packit |
ae235b |
subtle bugs and occasionally undefined behaviour. It is also worth
|
|
Packit |
ae235b |
noting that since all of these operations require global
|
|
Packit |
ae235b |
synchronisation of the entire machine, they can be quite slow. In
|
|
Packit |
ae235b |
the case of performing multiple atomic operations it can often be
|
|
Packit |
ae235b |
faster to simply acquire a mutex lock around the critical area,
|
|
Packit |
ae235b |
perform the operations normally and then release the lock.
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Functions
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
g_atomic_int_get ()
|
|
Packit |
ae235b |
gint
|
|
Packit |
ae235b |
g_atomic_int_get (const volatile gint *atomic );
|
|
Packit |
ae235b |
Gets the current value of atomic
|
|
Packit |
ae235b |
.
|
|
Packit |
ae235b |
This call acts as a full compiler and hardware
|
|
Packit |
ae235b |
memory barrier (before the get).
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Parameters
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
atomic
|
|
Packit |
ae235b |
a pointer to a gint or guint
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Returns
|
|
Packit |
ae235b |
the value of the integer
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Since: 2.4
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
g_atomic_int_set ()
|
|
Packit |
ae235b |
void
|
|
Packit |
ae235b |
g_atomic_int_set (volatile gint *atomic ,
|
|
Packit |
ae235b |
gint newval );
|
|
Packit |
ae235b |
Sets the value of atomic
|
|
Packit |
ae235b |
to newval
|
|
Packit |
ae235b |
.
|
|
Packit |
ae235b |
This call acts as a full compiler and hardware
|
|
Packit |
ae235b |
memory barrier (after the set).
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Parameters
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
atomic
|
|
Packit |
ae235b |
a pointer to a gint or guint
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
newval
|
|
Packit |
ae235b |
a new value to store
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Since: 2.4
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
g_atomic_int_inc ()
|
|
Packit |
ae235b |
void
|
|
Packit |
ae235b |
g_atomic_int_inc (gint *atomic );
|
|
Packit |
ae235b |
Increments the value of atomic
|
|
Packit |
ae235b |
by 1.
|
|
Packit |
ae235b |
Think of this operation as an atomic version of { *atomic += 1; } .
|
|
Packit |
ae235b |
This call acts as a full compiler and hardware memory barrier.
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Parameters
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
atomic
|
|
Packit |
ae235b |
a pointer to a gint or guint
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Since: 2.4
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
g_atomic_int_dec_and_test ()
|
|
Packit |
ae235b |
gboolean
|
|
Packit |
ae235b |
g_atomic_int_dec_and_test (gint *atomic );
|
|
Packit |
ae235b |
Decrements the value of atomic
|
|
Packit |
ae235b |
by 1.
|
|
Packit |
ae235b |
Think of this operation as an atomic version of
|
|
Packit |
ae235b |
{ *atomic -= 1; return (*atomic == 0); } .
|
|
Packit |
ae235b |
This call acts as a full compiler and hardware memory barrier.
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Parameters
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
atomic
|
|
Packit |
ae235b |
a pointer to a gint or guint
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Returns
|
|
Packit |
ae235b |
TRUE if the resultant value is zero
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Since: 2.4
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
g_atomic_int_compare_and_exchange ()
|
|
Packit |
ae235b |
gboolean
|
|
Packit |
ae235b |
g_atomic_int_compare_and_exchange (volatile gint *atomic ,
|
|
Packit |
ae235b |
gint oldval ,
|
|
Packit |
ae235b |
gint newval );
|
|
Packit |
ae235b |
Compares atomic
|
|
Packit |
ae235b |
to oldval
|
|
Packit |
ae235b |
and, if equal, sets it to newval
|
|
Packit |
ae235b |
.
|
|
Packit |
ae235b |
If atomic
|
|
Packit |
ae235b |
was not equal to oldval
|
|
Packit |
ae235b |
then no change occurs.
|
|
Packit |
ae235b |
This compare and exchange is done atomically.
|
|
Packit |
ae235b |
Think of this operation as an atomic version of
|
|
Packit |
ae235b |
{ if (*atomic == oldval) { *atomic = newval; return TRUE; } else return FALSE; } .
|
|
Packit |
ae235b |
This call acts as a full compiler and hardware memory barrier.
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Parameters
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
atomic
|
|
Packit |
ae235b |
a pointer to a gint or guint
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
oldval
|
|
Packit |
ae235b |
the value to compare with
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
newval
|
|
Packit |
ae235b |
the value to conditionally replace with
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Returns
|
|
Packit |
ae235b |
TRUE if the exchange took place
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Since: 2.4
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
g_atomic_int_add ()
|
|
Packit |
ae235b |
gint
|
|
Packit |
ae235b |
g_atomic_int_add (volatile gint *atomic ,
|
|
Packit |
ae235b |
gint val );
|
|
Packit |
ae235b |
Atomically adds val
|
|
Packit |
ae235b |
to the value of atomic
|
|
Packit |
ae235b |
.
|
|
Packit |
ae235b |
Think of this operation as an atomic version of
|
|
Packit |
ae235b |
{ tmp = *atomic; *atomic += val; return tmp; } .
|
|
Packit |
ae235b |
This call acts as a full compiler and hardware memory barrier.
|
|
Packit |
ae235b |
Before version 2.30, this function did not return a value
|
|
Packit |
ae235b |
(but g_atomic_int_exchange_and_add() did, and had the same meaning).
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Parameters
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
atomic
|
|
Packit |
ae235b |
a pointer to a gint or guint
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
val
|
|
Packit |
ae235b |
the value to add
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Returns
|
|
Packit |
ae235b |
the value of atomic
|
|
Packit |
ae235b |
before the add, signed
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Since: 2.4
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
g_atomic_int_and ()
|
|
Packit |
ae235b |
guint
|
|
Packit |
ae235b |
g_atomic_int_and (volatile guint *atomic ,
|
|
Packit |
ae235b |
guint val );
|
|
Packit |
ae235b |
Performs an atomic bitwise 'and' of the value of atomic
|
|
Packit |
ae235b |
and val
|
|
Packit |
ae235b |
,
|
|
Packit |
ae235b |
storing the result back in atomic
|
|
Packit |
ae235b |
.
|
|
Packit |
ae235b |
This call acts as a full compiler and hardware memory barrier.
|
|
Packit |
ae235b |
Think of this operation as an atomic version of
|
|
Packit |
ae235b |
{ tmp = *atomic; *atomic &= val; return tmp; } .
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Parameters
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
atomic
|
|
Packit |
ae235b |
a pointer to a gint or guint
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
val
|
|
Packit |
ae235b |
the value to 'and'
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Returns
|
|
Packit |
ae235b |
the value of atomic
|
|
Packit |
ae235b |
before the operation, unsigned
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Since: 2.30
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
g_atomic_int_or ()
|
|
Packit |
ae235b |
guint
|
|
Packit |
ae235b |
g_atomic_int_or (volatile guint *atomic ,
|
|
Packit |
ae235b |
guint val );
|
|
Packit |
ae235b |
Performs an atomic bitwise 'or' of the value of atomic
|
|
Packit |
ae235b |
and val
|
|
Packit |
ae235b |
,
|
|
Packit |
ae235b |
storing the result back in atomic
|
|
Packit |
ae235b |
.
|
|
Packit |
ae235b |
Think of this operation as an atomic version of
|
|
Packit |
ae235b |
{ tmp = *atomic; *atomic |= val; return tmp; } .
|
|
Packit |
ae235b |
This call acts as a full compiler and hardware memory barrier.
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Parameters
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
atomic
|
|
Packit |
ae235b |
a pointer to a gint or guint
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
val
|
|
Packit |
ae235b |
the value to 'or'
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Returns
|
|
Packit |
ae235b |
the value of atomic
|
|
Packit |
ae235b |
before the operation, unsigned
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Since: 2.30
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
g_atomic_int_xor ()
|
|
Packit |
ae235b |
guint
|
|
Packit |
ae235b |
g_atomic_int_xor (volatile guint *atomic ,
|
|
Packit |
ae235b |
guint val );
|
|
Packit |
ae235b |
Performs an atomic bitwise 'xor' of the value of atomic
|
|
Packit |
ae235b |
and val
|
|
Packit |
ae235b |
,
|
|
Packit |
ae235b |
storing the result back in atomic
|
|
Packit |
ae235b |
.
|
|
Packit |
ae235b |
Think of this operation as an atomic version of
|
|
Packit |
ae235b |
{ tmp = *atomic; *atomic ^= val; return tmp; } .
|
|
Packit |
ae235b |
This call acts as a full compiler and hardware memory barrier.
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Parameters
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
atomic
|
|
Packit |
ae235b |
a pointer to a gint or guint
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
val
|
|
Packit |
ae235b |
the value to 'xor'
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Returns
|
|
Packit |
ae235b |
the value of atomic
|
|
Packit |
ae235b |
before the operation, unsigned
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Since: 2.30
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
g_atomic_pointer_get ()
|
|
Packit |
ae235b |
gpointer
|
|
Packit |
ae235b |
g_atomic_pointer_get (const volatile void *atomic );
|
|
Packit |
ae235b |
Gets the current value of atomic
|
|
Packit |
ae235b |
.
|
|
Packit |
ae235b |
This call acts as a full compiler and hardware
|
|
Packit |
ae235b |
memory barrier (before the get).
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Parameters
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
atomic
|
|
Packit |
ae235b |
a pointer to a gpointer-sized value.
|
|
Packit |
ae235b |
[not nullable]
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Returns
|
|
Packit |
ae235b |
the value of the pointer
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Since: 2.4
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
g_atomic_pointer_set ()
|
|
Packit |
ae235b |
void
|
|
Packit |
ae235b |
g_atomic_pointer_set (volatile void *atomic ,
|
|
Packit |
ae235b |
gpointer newval );
|
|
Packit |
ae235b |
Sets the value of atomic
|
|
Packit |
ae235b |
to newval
|
|
Packit |
ae235b |
.
|
|
Packit |
ae235b |
This call acts as a full compiler and hardware
|
|
Packit |
ae235b |
memory barrier (after the set).
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Parameters
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
atomic
|
|
Packit |
ae235b |
a pointer to a gpointer-sized value.
|
|
Packit |
ae235b |
[not nullable]
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
newval
|
|
Packit |
ae235b |
a new value to store
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Since: 2.4
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
g_atomic_pointer_compare_and_exchange ()
|
|
Packit |
ae235b |
gboolean
|
|
Packit |
ae235b |
g_atomic_pointer_compare_and_exchange (volatile void *atomic ,
|
|
Packit |
ae235b |
gpointer oldval ,
|
|
Packit |
ae235b |
gpointer newval );
|
|
Packit |
ae235b |
Compares atomic
|
|
Packit |
ae235b |
to oldval
|
|
Packit |
ae235b |
and, if equal, sets it to newval
|
|
Packit |
ae235b |
.
|
|
Packit |
ae235b |
If atomic
|
|
Packit |
ae235b |
was not equal to oldval
|
|
Packit |
ae235b |
then no change occurs.
|
|
Packit |
ae235b |
This compare and exchange is done atomically.
|
|
Packit |
ae235b |
Think of this operation as an atomic version of
|
|
Packit |
ae235b |
{ if (*atomic == oldval) { *atomic = newval; return TRUE; } else return FALSE; } .
|
|
Packit |
ae235b |
This call acts as a full compiler and hardware memory barrier.
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Parameters
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
atomic
|
|
Packit |
ae235b |
a pointer to a gpointer-sized value.
|
|
Packit |
ae235b |
[not nullable]
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
oldval
|
|
Packit |
ae235b |
the value to compare with
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
newval
|
|
Packit |
ae235b |
the value to conditionally replace with
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Returns
|
|
Packit |
ae235b |
TRUE if the exchange took place
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Since: 2.4
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
g_atomic_pointer_add ()
|
|
Packit |
ae235b |
gssize
|
|
Packit |
ae235b |
g_atomic_pointer_add (volatile void *atomic ,
|
|
Packit |
ae235b |
gssize val );
|
|
Packit |
ae235b |
Atomically adds val
|
|
Packit |
ae235b |
to the value of atomic
|
|
Packit |
ae235b |
.
|
|
Packit |
ae235b |
Think of this operation as an atomic version of
|
|
Packit |
ae235b |
{ tmp = *atomic; *atomic += val; return tmp; } .
|
|
Packit |
ae235b |
This call acts as a full compiler and hardware memory barrier.
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Parameters
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
atomic
|
|
Packit |
ae235b |
a pointer to a gpointer-sized value.
|
|
Packit |
ae235b |
[not nullable]
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
val
|
|
Packit |
ae235b |
the value to add
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Returns
|
|
Packit |
ae235b |
the value of atomic
|
|
Packit |
ae235b |
before the add, signed
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Since: 2.30
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
g_atomic_pointer_and ()
|
|
Packit |
ae235b |
gsize
|
|
Packit |
ae235b |
g_atomic_pointer_and (volatile void *atomic ,
|
|
Packit |
ae235b |
gsize val );
|
|
Packit |
ae235b |
Performs an atomic bitwise 'and' of the value of atomic
|
|
Packit |
ae235b |
and val
|
|
Packit |
ae235b |
,
|
|
Packit |
ae235b |
storing the result back in atomic
|
|
Packit |
ae235b |
.
|
|
Packit |
ae235b |
Think of this operation as an atomic version of
|
|
Packit |
ae235b |
{ tmp = *atomic; *atomic &= val; return tmp; } .
|
|
Packit |
ae235b |
This call acts as a full compiler and hardware memory barrier.
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Parameters
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
atomic
|
|
Packit |
ae235b |
a pointer to a gpointer-sized value.
|
|
Packit |
ae235b |
[not nullable]
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
val
|
|
Packit |
ae235b |
the value to 'and'
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Returns
|
|
Packit |
ae235b |
the value of atomic
|
|
Packit |
ae235b |
before the operation, unsigned
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Since: 2.30
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
g_atomic_pointer_or ()
|
|
Packit |
ae235b |
gsize
|
|
Packit |
ae235b |
g_atomic_pointer_or (volatile void *atomic ,
|
|
Packit |
ae235b |
gsize val );
|
|
Packit |
ae235b |
Performs an atomic bitwise 'or' of the value of atomic
|
|
Packit |
ae235b |
and val
|
|
Packit |
ae235b |
,
|
|
Packit |
ae235b |
storing the result back in atomic
|
|
Packit |
ae235b |
.
|
|
Packit |
ae235b |
Think of this operation as an atomic version of
|
|
Packit |
ae235b |
{ tmp = *atomic; *atomic |= val; return tmp; } .
|
|
Packit |
ae235b |
This call acts as a full compiler and hardware memory barrier.
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Parameters
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
atomic
|
|
Packit |
ae235b |
a pointer to a gpointer-sized value.
|
|
Packit |
ae235b |
[not nullable]
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
val
|
|
Packit |
ae235b |
the value to 'or'
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Returns
|
|
Packit |
ae235b |
the value of atomic
|
|
Packit |
ae235b |
before the operation, unsigned
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Since: 2.30
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
g_atomic_pointer_xor ()
|
|
Packit |
ae235b |
gsize
|
|
Packit |
ae235b |
g_atomic_pointer_xor (volatile void *atomic ,
|
|
Packit |
ae235b |
gsize val );
|
|
Packit |
ae235b |
Performs an atomic bitwise 'xor' of the value of atomic
|
|
Packit |
ae235b |
and val
|
|
Packit |
ae235b |
,
|
|
Packit |
ae235b |
storing the result back in atomic
|
|
Packit |
ae235b |
.
|
|
Packit |
ae235b |
Think of this operation as an atomic version of
|
|
Packit |
ae235b |
{ tmp = *atomic; *atomic ^= val; return tmp; } .
|
|
Packit |
ae235b |
This call acts as a full compiler and hardware memory barrier.
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Parameters
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
atomic
|
|
Packit |
ae235b |
a pointer to a gpointer-sized value.
|
|
Packit |
ae235b |
[not nullable]
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
val
|
|
Packit |
ae235b |
the value to 'xor'
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Returns
|
|
Packit |
ae235b |
the value of atomic
|
|
Packit |
ae235b |
before the operation, unsigned
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Since: 2.30
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
g_atomic_int_exchange_and_add ()
|
|
Packit |
ae235b |
gint
|
|
Packit |
ae235b |
g_atomic_int_exchange_and_add (volatile gint *atomic ,
|
|
Packit |
ae235b |
gint val );
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
g_atomic_int_exchange_and_add has been deprecated since version 2.30 and should not be used in newly-written code.
|
|
Packit |
ae235b |
Use g_atomic_int_add() instead.
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
This function existed before g_atomic_int_add() returned the prior
|
|
Packit |
ae235b |
value of the integer (which it now does). It is retained only for
|
|
Packit |
ae235b |
compatibility reasons. Don't use this function in new code.
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Parameters
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
atomic
|
|
Packit |
ae235b |
a pointer to a gint
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
val
|
|
Packit |
ae235b |
the value to add
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Returns
|
|
Packit |
ae235b |
the value of atomic
|
|
Packit |
ae235b |
before the add, signed
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Since: 2.4
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Types and Values
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
G_ATOMIC_LOCK_FREE
|
|
Packit |
ae235b |
#define G_ATOMIC_LOCK_FREE
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
This macro is defined if the atomic operations of GLib are
|
|
Packit |
ae235b |
implemented using real hardware atomic operations. This means that
|
|
Packit |
ae235b |
the GLib atomic API can be used between processes and safely mixed
|
|
Packit |
ae235b |
with other (hardware) atomic APIs.
|
|
Packit |
ae235b |
If this macro is not defined, the atomic operations may be
|
|
Packit |
ae235b |
emulated using a mutex. In that case, the GLib atomic operations are
|
|
Packit |
ae235b |
only atomic relative to themselves and within a single process.
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
See Also
|
|
Packit |
ae235b |
GMutex
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Generated by GTK-Doc V1.27
|
|
Packit |
ae235b |
</body>
|
|
Packit |
ae235b |
</html>
|