2.9
[glibc/nacl-glibc.git] / nptl / sysdeps / unix / sysv / linux / alpha / bits / pthreadtypes.h
blob41c0be19785e3e1fc3297bd0c3dbe85ac462753b
1 /* Machine-specific pthread type layouts. Alpha version.
2 Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
3 This file is part of the GNU C Library.
5 The GNU C Library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public
16 License along with the GNU C Library; if not, write to the Free
17 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
18 02111-1307 USA. */
20 #ifndef _BITS_PTHREADTYPES_H
21 #define _BITS_PTHREADTYPES_H 1
23 #define __SIZEOF_PTHREAD_ATTR_T 56
24 #define __SIZEOF_PTHREAD_MUTEX_T 40
25 #define __SIZEOF_PTHREAD_MUTEXATTR_T 4
26 #define __SIZEOF_PTHREAD_COND_T 48
27 #define __SIZEOF_PTHREAD_CONDATTR_T 4
28 #define __SIZEOF_PTHREAD_RWLOCK_T 56
29 #define __SIZEOF_PTHREAD_RWLOCKATTR_T 8
30 #define __SIZEOF_PTHREAD_BARRIER_T 32
31 #define __SIZEOF_PTHREAD_BARRIERATTR_T 4
34 /* Thread identifiers. The structure of the attribute type is
35 deliberately not exposed. */
36 typedef unsigned long int pthread_t;
39 typedef union
41 char __size[__SIZEOF_PTHREAD_ATTR_T];
42 long int __align;
43 } pthread_attr_t;
46 typedef struct __pthread_internal_list
48 struct __pthread_internal_list *__prev;
49 struct __pthread_internal_list *__next;
50 } __pthread_list_t;
53 /* Data structures for mutex handling. The structure of the attribute
54 type is deliberately not exposed. */
55 typedef union
57 struct __pthread_mutex_s
59 int __lock;
60 unsigned int __count;
61 int __owner;
62 unsigned int __nusers;
63 /* KIND must stay at this position in the structure to maintain
64 binary compatibility. */
65 int __kind;
66 int __spins;
67 __pthread_list_t __list;
68 #define __PTHREAD_MUTEX_HAVE_PREV 1
69 } __data;
70 char __size[__SIZEOF_PTHREAD_MUTEX_T];
71 long int __align;
72 } pthread_mutex_t;
74 typedef union
76 char __size[__SIZEOF_PTHREAD_MUTEXATTR_T];
77 int __align;
78 } pthread_mutexattr_t;
81 /* Data structure for conditional variable handling. The structure of
82 the attribute type is deliberately not exposed. */
83 typedef union
85 struct
87 int __lock;
88 unsigned int __futex;
89 __extension__ unsigned long long int __total_seq;
90 __extension__ unsigned long long int __wakeup_seq;
91 __extension__ unsigned long long int __woken_seq;
92 void *__mutex;
93 unsigned int __nwaiters;
94 unsigned int __broadcast_seq;
95 } __data;
96 char __size[__SIZEOF_PTHREAD_COND_T];
97 __extension__ long long int __align;
98 } pthread_cond_t;
100 typedef union
102 char __size[__SIZEOF_PTHREAD_CONDATTR_T];
103 int __align;
104 } pthread_condattr_t;
107 /* Keys for thread-specific data */
108 typedef unsigned int pthread_key_t;
111 /* Once-only execution */
112 typedef int pthread_once_t;
115 #if defined __USE_UNIX98 || defined __USE_XOPEN2K
116 /* Data structure for read-write lock variable handling. The
117 structure of the attribute type is deliberately not exposed. */
118 typedef union
120 struct
122 int __lock;
123 unsigned int __nr_readers;
124 unsigned int __readers_wakeup;
125 unsigned int __writer_wakeup;
126 unsigned int __nr_readers_queued;
127 unsigned int __nr_writers_queued;
128 int __writer;
129 int __shared;
130 unsigned long int __pad1;
131 unsigned long int __pad2;
132 /* FLAGS must stay at this position in the structure to maintain
133 binary compatibility. */
134 unsigned int __flags;
135 } __data;
136 char __size[__SIZEOF_PTHREAD_RWLOCK_T];
137 long int __align;
138 } pthread_rwlock_t;
140 typedef union
142 char __size[__SIZEOF_PTHREAD_RWLOCKATTR_T];
143 long int __align;
144 } pthread_rwlockattr_t;
145 #endif
148 #ifdef __USE_XOPEN2K
149 /* POSIX spinlock data type. */
150 typedef volatile int pthread_spinlock_t;
152 /* POSIX barriers data type. The structure of the type is
153 deliberately not exposed. */
154 typedef union
156 char __size[__SIZEOF_PTHREAD_BARRIER_T];
157 long int __align;
158 } pthread_barrier_t;
160 typedef union
162 char __size[__SIZEOF_PTHREAD_BARRIERATTR_T];
163 int __align;
164 } pthread_barrierattr_t;
165 #endif
168 #endif /* bits/pthreadtypes.h */