added g_atomic_pointer_set() and g_atomic_int_set() for systems where the

Tue Dec 13 10:13:32 2005  Tim Janik  <timj@imendio.com>

        * glib/gatomic.h: added g_atomic_pointer_set() and g_atomic_int_set()
        for systems where the initialization of atomic variables requires a
        write memory barrier.
This commit is contained in:
Tim Janik 2005-12-13 09:15:52 +00:00 committed by Tim Janik
parent 2e6faeec59
commit 7c24467a1c
5 changed files with 50 additions and 8 deletions

View File

@ -1,3 +1,9 @@
Tue Dec 13 10:13:32 2005 Tim Janik <timj@imendio.com>
* glib/gatomic.h: added g_atomic_pointer_set() and g_atomic_int_set()
for systems where the initialization of atomic variables requires a
write memory barrier.
2005-12-09 Matthias Clasen <mclasen@redhat.com> 2005-12-09 Matthias Clasen <mclasen@redhat.com>
* configure.in: Bump version * configure.in: Bump version

View File

@ -1,3 +1,9 @@
Tue Dec 13 10:13:32 2005 Tim Janik <timj@imendio.com>
* glib/gatomic.h: added g_atomic_pointer_set() and g_atomic_int_set()
for systems where the initialization of atomic variables requires a
write memory barrier.
2005-12-09 Matthias Clasen <mclasen@redhat.com> 2005-12-09 Matthias Clasen <mclasen@redhat.com>
* configure.in: Bump version * configure.in: Bump version

View File

@ -1,3 +1,9 @@
Tue Dec 13 10:13:32 2005 Tim Janik <timj@imendio.com>
* glib/gatomic.h: added g_atomic_pointer_set() and g_atomic_int_set()
for systems where the initialization of atomic variables requires a
write memory barrier.
2005-12-09 Matthias Clasen <mclasen@redhat.com> 2005-12-09 Matthias Clasen <mclasen@redhat.com>
* configure.in: Bump version * configure.in: Bump version

View File

@ -613,6 +613,15 @@ g_atomic_int_get (volatile gint *atomic)
return result; return result;
} }
void
g_atomic_int_set (volatile gint *atomic,
gint newval)
{
g_mutex_lock (g_atomic_mutex);
*atomic = newval;
g_mutex_unlock (g_atomic_mutex);
}
gpointer gpointer
g_atomic_pointer_get (volatile gpointer *atomic) g_atomic_pointer_get (volatile gpointer *atomic)
{ {
@ -624,6 +633,15 @@ g_atomic_pointer_get (volatile gpointer *atomic)
return result; return result;
} }
void
g_atomic_pointer_set (volatile gpointer *atomic,
gpointer newval)
{
g_mutex_lock (g_atomic_mutex);
*atomic = newval;
g_mutex_unlock (g_atomic_mutex);
}
#endif /* G_ATOMIC_OP_MEMORY_BARRIER_NEEDED */ #endif /* G_ATOMIC_OP_MEMORY_BARRIER_NEEDED */
#elif defined (G_ATOMIC_OP_MEMORY_BARRIER_NEEDED) #elif defined (G_ATOMIC_OP_MEMORY_BARRIER_NEEDED)
gint gint

View File

@ -34,23 +34,29 @@
G_BEGIN_DECLS G_BEGIN_DECLS
gint g_atomic_int_exchange_and_add (volatile gint *atomic, gint g_atomic_int_exchange_and_add (volatile gint *atomic,
gint val); gint val);
void g_atomic_int_add (volatile gint *atomic, void g_atomic_int_add (volatile gint *atomic,
gint val); gint val);
gboolean g_atomic_int_compare_and_exchange (volatile gint *atomic, gboolean g_atomic_int_compare_and_exchange (volatile gint *atomic,
gint oldval, gint oldval,
gint newval); gint newval);
gboolean g_atomic_pointer_compare_and_exchange (volatile gpointer *atomic, gboolean g_atomic_pointer_compare_and_exchange (volatile gpointer *atomic,
gpointer oldval, gpointer oldval,
gpointer newval); gpointer newval);
gint g_atomic_int_get (volatile gint *atomic); gint g_atomic_int_get (volatile gint *atomic);
void g_atomic_int_set (volatile gint *atomic,
gint newval);
gpointer g_atomic_pointer_get (volatile gpointer *atomic); gpointer g_atomic_pointer_get (volatile gpointer *atomic);
void g_atomic_pointer_set (volatile gpointer *atomic,
gpointer newval);
#ifndef G_ATOMIC_OP_MEMORY_BARRIER_NEEDED #ifndef G_ATOMIC_OP_MEMORY_BARRIER_NEEDED
# define g_atomic_int_get(atomic) (*(atomic)) # define g_atomic_int_get(atomic) (*(atomic))
# define g_atomic_pointer_get(atomic) (*(atomic)) # define g_atomic_int_set(atomic, newval) ((void) (*(atomic) = (newval)))
# define g_atomic_pointer_get(atomic) (*(atomic))
# define g_atomic_pointer_set(atomic, newval) ((void) (*(atomic) = (newval)))
#endif /* G_ATOMIC_OP_MEMORY_BARRIER_NEEDED */ #endif /* G_ATOMIC_OP_MEMORY_BARRIER_NEEDED */
#define g_atomic_int_inc(atomic) (g_atomic_int_add ((atomic), 1)) #define g_atomic_int_inc(atomic) (g_atomic_int_add ((atomic), 1))