|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef _SPINLOCK_H |
|
|
#define _SPINLOCK_H |
|
|
|
|
|
#if defined _WIN32 && !defined __CYGWIN__ |
|
|
# include "windows-spin.h" |
|
|
typedef glwthread_spinlock_t gl_spinlock_t; |
|
|
# define gl_spinlock_initializer GLWTHREAD_SPIN_INIT |
|
|
#else |
|
|
typedef unsigned int gl_spinlock_t; |
|
|
# define gl_spinlock_initializer 0 |
|
|
#endif |
|
|
|
|
|
#ifdef __cplusplus |
|
|
extern "C" { |
|
|
#endif |
|
|
|
|
|
#include <stdlib.h> |
|
|
|
|
|
#define gl_spinlock_define(STORAGECLASS, NAME) \ |
|
|
STORAGECLASS gl_spinlock_t NAME; |
|
|
#define gl_spinlock_define_initialized(STORAGECLASS, NAME) \ |
|
|
STORAGECLASS gl_spinlock_t NAME = gl_spinlock_initializer; |
|
|
#define gl_spinlock_init(NAME) \ |
|
|
glthread_spinlock_init (&NAME) |
|
|
#define gl_spinlock_lock(NAME) \ |
|
|
glthread_spinlock_lock (&NAME) |
|
|
#define gl_spinlock_unlock(NAME) \ |
|
|
do \ |
|
|
{ \ |
|
|
if (glthread_spinlock_unlock (&NAME)) \ |
|
|
abort (); \ |
|
|
} \ |
|
|
while (0) |
|
|
#define gl_spinlock_destroy(NAME) \ |
|
|
glthread_spinlock_destroy (&NAME) |
|
|
|
|
|
#if defined _WIN32 && !defined __CYGWIN__ |
|
|
# define glthread_spinlock_init(lock) \ |
|
|
glwthread_spin_init (lock) |
|
|
# define glthread_spinlock_lock(lock) \ |
|
|
((void) glwthread_spin_lock (lock)) |
|
|
# define glthread_spinlock_unlock(lock) \ |
|
|
glwthread_spin_unlock (lock) |
|
|
# define glthread_spinlock_destroy(lock) \ |
|
|
((void) glwthread_spin_destroy (lock)) |
|
|
#else |
|
|
extern void glthread_spinlock_init (gl_spinlock_t *lock); |
|
|
extern void glthread_spinlock_lock (gl_spinlock_t *lock); |
|
|
extern int glthread_spinlock_unlock (gl_spinlock_t *lock); |
|
|
extern void glthread_spinlock_destroy (gl_spinlock_t *lock); |
|
|
#endif |
|
|
|
|
|
#ifdef __cplusplus |
|
|
} |
|
|
#endif |
|
|
|
|
|
#endif |
|
|
|