#define InterlockedXor(a,b) _gInterlockedXor(a,b)
#endif
-/* mingw32 does not have MemoryBarrier.
- * MemoryBarrier may be defined as a macro or a function.
- * Just make a failsafe version for ourselves. */
-#ifdef MemoryBarrier
-#define _GMemoryBarrier MemoryBarrier
-#else
-static inline void _GMemoryBarrier (void) {
- long dummy = 0;
- InterlockedExchange (&dummy, 1);
-}
-#endif
-
/*
* http://msdn.microsoft.com/en-us/library/ms684122(v=vs.85).aspx
*/
gint
(g_atomic_int_get) (const volatile gint *atomic)
{
- _GMemoryBarrier ();
+ MemoryBarrier ();
return *atomic;
}
gint newval)
{
*atomic = newval;
- _GMemoryBarrier ();
+ MemoryBarrier ();
}
void
{
const volatile gpointer *ptr = atomic;
- _GMemoryBarrier ();
+ MemoryBarrier ();
return *ptr;
}
volatile gpointer *ptr = atomic;
*ptr = newval;
- _GMemoryBarrier ();
+ MemoryBarrier ();
}
gboolean
static pthread_mutex_t g_atomic_lock = PTHREAD_MUTEX_INITIALIZER;
gint
-(g_atomic_int_get) (volatile gint *atomic)
+(g_atomic_int_get) (const volatile gint *atomic)
{
gint value;
gpointer
-(g_atomic_pointer_get) (volatile void *atomic)
+(g_atomic_pointer_get) (const volatile void *atomic)
{
- volatile gpointer *ptr = atomic;
+ const volatile gpointer *ptr = atomic;
gpointer value;
pthread_mutex_lock (&g_atomic_lock);