summaryrefslogtreecommitdiff
path: root/libpthread/linuxthreads/sysdeps/pthread
diff options
context:
space:
mode:
author"Steven J. Hill" <sjhill@realitydiluted.com>2005-05-14 23:42:47 +0000
committer"Steven J. Hill" <sjhill@realitydiluted.com>2005-05-14 23:42:47 +0000
commitaf0e80a93e60d0a478c489084607c7175d22dc9e (patch)
tree1edae103c11e3cf6fe740f0263ebb3ed5bbb2342 /libpthread/linuxthreads/sysdeps/pthread
parent4bbdf8dad27de33259fcbd31922d4a6fa8c18dc1 (diff)
There were two versions of 'pthreadtypes.h' originally in uClibc. Also,
since we are going to support the two implementations of pthreads, we again need to instead create symbolic links to use the proper version of the file depending on the pthreads option chosen.
Diffstat (limited to 'libpthread/linuxthreads/sysdeps/pthread')
-rw-r--r--libpthread/linuxthreads/sysdeps/pthread/bits/pthreadtypes.h38
1 files changed, 34 insertions, 4 deletions
diff --git a/libpthread/linuxthreads/sysdeps/pthread/bits/pthreadtypes.h b/libpthread/linuxthreads/sysdeps/pthread/bits/pthreadtypes.h
index db4c3790c..d1daef07a 100644
--- a/libpthread/linuxthreads/sysdeps/pthread/bits/pthreadtypes.h
+++ b/libpthread/linuxthreads/sysdeps/pthread/bits/pthreadtypes.h
@@ -25,8 +25,9 @@
/* Fast locks (not abstract because mutexes and conditions aren't abstract). */
struct _pthread_fastlock
{
- long int __status; /* "Free" or "taken" or head of waiting list */
- int __spinlock; /* For compare-and-swap emulation */
+ long int __status; /* "Free" or "taken" or head of waiting list */
+ int __spinlock; /* Used by compare_and_swap emulation. Also,
+ adaptive SMP lock stores spin count here. */
};
#ifndef _PTHREAD_DESCR_DEFINED
@@ -37,7 +38,7 @@ typedef struct _pthread_descr_struct *_pthread_descr;
/* Attributes for threads. */
-typedef struct
+typedef struct __pthread_attr_s
{
int __detachstate;
int __schedpolicy;
@@ -52,10 +53,20 @@ typedef struct
/* Conditions (not abstract because of PTHREAD_COND_INITIALIZER */
+
+#ifdef __GLIBC_HAVE_LONG_LONG
+__extension__ typedef long long __pthread_cond_align_t;
+#else
+typedef long __pthread_cond_align_t;
+#endif
+
typedef struct
{
struct _pthread_fastlock __c_lock; /* Protect against concurrent access */
_pthread_descr __c_waiting; /* Threads waiting on this condition */
+ char __padding[48 - sizeof (struct _pthread_fastlock)
+ - sizeof (_pthread_descr) - sizeof (__pthread_cond_align_t)];
+ __pthread_cond_align_t __align;
} pthread_cond_t;
@@ -93,7 +104,7 @@ typedef struct
typedef int pthread_once_t;
-#ifdef __USE_UNIX98
+#if defined __USE_UNIX98 || defined __USE_XOPEN2K
/* Read-write locks. */
typedef struct _pthread_rwlock_t
{
@@ -115,6 +126,25 @@ typedef struct
} pthread_rwlockattr_t;
#endif
+#ifdef __USE_XOPEN2K
+/* POSIX spinlock data type. */
+typedef volatile int pthread_spinlock_t;
+
+/* POSIX barrier. */
+typedef struct {
+ struct _pthread_fastlock __ba_lock; /* Lock to guarantee mutual exclusion */
+ int __ba_required; /* Threads needed for completion */
+ int __ba_present; /* Threads waiting */
+ _pthread_descr __ba_waiting; /* Queue of waiting threads */
+} pthread_barrier_t;
+
+/* barrier attribute */
+typedef struct {
+ int __pshared;
+} pthread_barrierattr_t;
+
+#endif
+
/* Thread identifiers */
typedef unsigned long int pthread_t;