Blame docs/reference/glib/html/glib-Atomic-Operations.html

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
Home
Packit ae235b
Up
Packit ae235b
Prev
Packit ae235b
Next
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 &amp;= 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 &amp;= 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>