===================================================================
@@ -35,6 +35,8 @@
Easy, since the interface is just one-to-one mapping. */
#define __GTHREADS 1
+/* To enable the c++0x thread library. */
+#define __GTHREADS_CXX0X 1
/* Some implementations of <pthread.h> require this to be defined. */
#ifndef _REENTRANT
@@ -44,11 +46,17 @@
#include <pthread.h>
#include <unistd.h>
+typedef pthread_t __gthread_t;
typedef pthread_key_t __gthread_key_t;
typedef pthread_once_t __gthread_once_t;
typedef pthread_mutex_t __gthread_mutex_t;
typedef pthread_mutex_t __gthread_recursive_mutex_t;
+typedef pthread_cond_t __gthread_cond_t;
+typedef struct timespec __gthread_time_t;
+#define __GTHREAD_HAS_COND 1
+#define __GTHREAD_COND_INIT PTHREAD_COND_INITIALIZER
+
#if defined(PTHREAD_RECURSIVE_MUTEX_INITIALIZER)
#define __GTHREAD_RECURSIVE_MUTEX_INIT PTHREAD_RECURSIVE_MUTEX_INITIALIZER
#elif defined(PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP)
@@ -80,9 +88,15 @@
__gthrw(pthread_getspecific)
__gthrw(pthread_setspecific)
__gthrw(pthread_create)
+__gthrw(pthread_join)
+__gthrw(pthread_detach)
+__gthrw(pthread_equal)
+__gthrw(pthread_self)
+__gthrw(sched_yield)
__gthrw(pthread_mutex_lock)
__gthrw(pthread_mutex_trylock)
+__gthrw(pthread_mutex_timedlock)
__gthrw(pthread_mutex_unlock)
__gthrw(pthread_mutexattr_init)
__gthrw(pthread_mutexattr_settype)
@@ -90,31 +104,81 @@
__gthrw(pthread_mutex_init)
__gthrw(pthread_mutex_destroy)
+__gthrw(pthread_cond_broadcast)
+__gthrw(pthread_cond_signal)
+__gthrw(pthread_cond_wait)
+__gthrw(pthread_cond_timedwait)
+__gthrw(pthread_cond_destroy)
+
+
static inline int
__gthread_active_p (void)
{
- return 1;
+ return __tpf_pthread_active ();
}
static inline int
-__gthread_once (__gthread_once_t *__once, void (*__func) (void))
+__gthread_create (__gthread_t *__threadid, void *(*__func) (void*),
+ void *__args)
{
+ return __gthrw_(pthread_create) (__threadid, NULL, __func, __args);
+}
+
+static inline int
+__gthread_join (__gthread_t __threadid, void **__value_ptr)
+{
if (__tpf_pthread_active ())
- return __gthrw_(pthread_once) (__once, __func);
+ return __gthrw_(pthread_join) (__threadid, __value_ptr);
else
return -1;
}
static inline int
-__gthread_key_create (__gthread_key_t *__key, void (*__dtor) (void *))
+__gthread_detach (__gthread_t __threadid)
{
if (__tpf_pthread_active ())
- return __gthrw_(pthread_key_create) (__key, __dtor);
+ return __gthrw_(pthread_detach) (__threadid);
else
return -1;
}
static inline int
+__gthread_equal (__gthread_t __t1, __gthread_t __t2)
+{
+ if (__tpf_pthread_active ())
+ return __gthrw_(pthread_equal) (__t1, __t2);
+ else
+ return -1;
+}
+
+static inline __gthread_t
+__gthread_self (void)
+{
+ return __gthrw_(pthread_self) ();
+}
+
+static inline int
+__gthread_yield (void)
+{
+ return __gthrw_(sched_yield) ();
+}
+
+static inline int
+__gthread_once (__gthread_once_t *__once, void (*__func) (void))
+{
+ if (__tpf_pthread_active ())
+ return __gthrw_(pthread_once) (__once, __func);
+ else
+ return -1;
+}
+
+static inline int
+__gthread_key_create (__gthread_key_t *__key, void (*__dtor) (void *))
+{
+ return __gthrw_(pthread_key_create) (__key, __dtor);
+}
+
+static inline int
__gthread_key_delete (__gthread_key_t __key)
{
if (__tpf_pthread_active ())
@@ -153,22 +217,23 @@
static inline int
__gthread_mutex_lock (__gthread_mutex_t *__mutex)
{
- if (__tpf_pthread_active ())
- return __gthrw_(pthread_mutex_lock) (__mutex);
- else
- return 0;
+ return __gthrw_(pthread_mutex_lock) (__mutex);
}
static inline int
__gthread_mutex_trylock (__gthread_mutex_t *__mutex)
{
- if (__tpf_pthread_active ())
- return __gthrw_(pthread_mutex_trylock) (__mutex);
- else
- return 0;
+ return __gthrw_(pthread_mutex_trylock) (__mutex);
}
static inline int
+__gthread_mutex_timedlock (__gthread_mutex_t *__mutex,
+ const __gthread_time_t *__abs_timeout)
+{
+ return __gthrw_(pthread_mutex_timedlock) (__mutex, __abs_timeout);
+}
+
+static inline int
__gthread_mutex_unlock (__gthread_mutex_t *__mutex)
{
if (__tpf_pthread_active ())
@@ -180,49 +245,43 @@
static inline int
__gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex)
{
- if (__tpf_pthread_active ())
- return __gthread_mutex_lock (__mutex);
- else
- return 0;
+ return __gthread_mutex_lock (__mutex);
}
static inline int
__gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex)
{
- if (__tpf_pthread_active ())
- return __gthread_mutex_trylock (__mutex);
- else
- return 0;
+ return __gthread_mutex_trylock (__mutex);
}
static inline int
+__gthread_recursive_mutex_timedlock (__gthread_recursive_mutex_t *__mutex,
+ const __gthread_time_t *__abs_timeout)
+{
+ return __gthread_mutex_timedlock (__mutex, __abs_timeout);
+}
+
+static inline int
__gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex)
{
- if (__tpf_pthread_active ())
- return __gthread_mutex_unlock (__mutex);
- else
- return 0;
+ return __gthread_mutex_unlock (__mutex);
}
static inline int
__gthread_recursive_mutex_init_function (__gthread_recursive_mutex_t *__mutex)
{
- if (__tpf_pthread_active ())
- {
- pthread_mutexattr_t __attr;
- int __r;
+ pthread_mutexattr_t __attr;
+ int __r;
- __r = __gthrw_(pthread_mutexattr_init) (&__attr);
- if (!__r)
- __r = __gthrw_(pthread_mutexattr_settype) (&__attr,
- PTHREAD_MUTEX_RECURSIVE);
- if (!__r)
- __r = __gthrw_(pthread_mutex_init) (__mutex, &__attr);
- if (!__r)
- __r = __gthrw_(pthread_mutexattr_destroy) (&__attr);
- return __r;
- }
- return 0;
+ __r = __gthrw_(pthread_mutexattr_init) (&__attr);
+ if (!__r)
+ __r = __gthrw_(pthread_mutexattr_settype) (&__attr,
+ PTHREAD_MUTEX_RECURSIVE);
+ if (!__r)
+ __r = __gthrw_(pthread_mutex_init) (__mutex, &__attr);
+ if (!__r)
+ __r = __gthrw_(pthread_mutexattr_destroy) (&__attr);
+ return __r;
}
static inline int
@@ -231,4 +290,53 @@
return __gthread_mutex_destroy (__mutex);
}
+static inline int
+__gthread_cond_broadcast (__gthread_cond_t *__cond)
+{
+ return __gthrw_(pthread_cond_broadcast) (__cond);
+}
+
+static inline int
+__gthread_cond_signal (__gthread_cond_t *__cond)
+{
+ return __gthrw_(pthread_cond_signal) (__cond);
+}
+
+static inline int
+__gthread_cond_wait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex)
+{
+ return __gthrw_(pthread_cond_wait) (__cond, __mutex);
+}
+
+static inline int
+__gthread_cond_timedwait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex,
+ const __gthread_time_t *__abs_timeout)
+{
+ return __gthrw_(pthread_cond_timedwait) (__cond, __mutex, __abs_timeout);
+}
+
+static inline int
+__gthread_cond_wait_recursive (__gthread_cond_t *__cond,
+ __gthread_recursive_mutex_t *__mutex)
+{
+ return __gthread_cond_wait (__cond, __mutex);
+}
+
+static inline int
+__gthread_cond_timedwait_recursive (__gthread_cond_t *__cond,
+ __gthread_recursive_mutex_t *__mutex,
+ const __gthread_time_t *__abs_timeout)
+{
+ return __gthread_cond_timedwait (__cond, __mutex, __abs_timeout);
+}
+
+static inline int
+__gthread_cond_destroy (__gthread_cond_t* __cond)
+{
+ if (__tpf_pthread_active ())
+ return __gthrw_(pthread_cond_destroy) (__cond);
+ else
+ return 0;
+}
+
#endif /* ! GCC_GTHR_TPF_H */