diff options
Diffstat (limited to 'libpthread/linuxthreads/sysdeps/pthread')
| -rw-r--r-- | libpthread/linuxthreads/sysdeps/pthread/bits/pthreadtypes.h | 38 | 
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; | 
