]>
Commit | Line | Data |
---|---|---|
a8839787 | 1 | /* Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. |
02a9f771 DJ |
2 | This file is part of the GNU C Library. |
3 | ||
4 | The GNU C Library is free software; you can redistribute it and/or | |
5 | modify it under the terms of the GNU Lesser General Public | |
6 | License as published by the Free Software Foundation; either | |
7 | version 2.1 of the License, or (at your option) any later version. | |
8 | ||
9 | The GNU C Library is distributed in the hope that it will be useful, | |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
12 | Lesser General Public License for more details. | |
13 | ||
14 | You should have received a copy of the GNU Lesser General Public | |
15 | License along with the GNU C Library; if not, write to the Free | |
16 | Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA | |
17 | 02111-1307 USA. */ | |
18 | ||
19 | #ifndef _BITS_PTHREADTYPES_H | |
20 | #define _BITS_PTHREADTYPES_H 1 | |
21 | ||
30efab51 DJ |
22 | #include <endian.h> |
23 | ||
02a9f771 DJ |
24 | #define __SIZEOF_PTHREAD_ATTR_T 36 |
25 | #define __SIZEOF_PTHREAD_MUTEX_T 24 | |
26 | #define __SIZEOF_PTHREAD_MUTEXATTR_T 4 | |
27 | #define __SIZEOF_PTHREAD_COND_T 48 | |
28 | #define __SIZEOF_PTHREAD_COND_COMPAT_T 12 | |
29 | #define __SIZEOF_PTHREAD_CONDATTR_T 4 | |
30 | #define __SIZEOF_PTHREAD_RWLOCK_T 32 | |
31 | #define __SIZEOF_PTHREAD_RWLOCKATTR_T 8 | |
32 | #define __SIZEOF_PTHREAD_BARRIER_T 20 | |
33 | #define __SIZEOF_PTHREAD_BARRIERATTR_T 4 | |
34 | ||
35 | ||
36 | /* Thread identifiers. The structure of the attribute type is not | |
37 | exposed on purpose. */ | |
38 | typedef unsigned long int pthread_t; | |
39 | ||
40 | ||
41 | typedef union | |
42 | { | |
43 | char __size[__SIZEOF_PTHREAD_ATTR_T]; | |
44 | long int __align; | |
45 | } pthread_attr_t; | |
46 | ||
47 | ||
a8839787 DJ |
48 | typedef struct __pthread_internal_slist |
49 | { | |
50 | struct __pthread_internal_slist *__next; | |
51 | } __pthread_slist_t; | |
52 | ||
53 | ||
02a9f771 DJ |
54 | /* Data structures for mutex handling. The structure of the attribute |
55 | type is not exposed on purpose. */ | |
56 | typedef union | |
57 | { | |
a8839787 | 58 | struct __pthread_mutex_s |
02a9f771 DJ |
59 | { |
60 | int __lock; | |
61 | unsigned int __count; | |
62 | int __owner; | |
63 | /* KIND must stay at this position in the structure to maintain | |
64 | binary compatibility. */ | |
65 | int __kind; | |
66 | unsigned int __nusers; | |
a8839787 DJ |
67 | __extension__ union |
68 | { | |
69 | int __spins; | |
70 | __pthread_slist_t __list; | |
71 | }; | |
02a9f771 DJ |
72 | } __data; |
73 | char __size[__SIZEOF_PTHREAD_MUTEX_T]; | |
74 | long int __align; | |
75 | } pthread_mutex_t; | |
76 | ||
77 | typedef union | |
78 | { | |
79 | char __size[__SIZEOF_PTHREAD_MUTEXATTR_T]; | |
80 | long int __align; | |
81 | } pthread_mutexattr_t; | |
82 | ||
83 | ||
84 | /* Data structure for conditional variable handling. The structure of | |
85 | the attribute type is not exposed on purpose. */ | |
86 | typedef union | |
87 | { | |
88 | struct | |
89 | { | |
90 | int __lock; | |
91 | unsigned int __futex; | |
a8839787 DJ |
92 | __extension__ unsigned long long int __total_seq; |
93 | __extension__ unsigned long long int __wakeup_seq; | |
94 | __extension__ unsigned long long int __woken_seq; | |
02a9f771 DJ |
95 | void *__mutex; |
96 | unsigned int __nwaiters; | |
97 | unsigned int __broadcast_seq; | |
98 | } __data; | |
99 | char __size[__SIZEOF_PTHREAD_COND_T]; | |
a8839787 | 100 | __extension__ long long int __align; |
02a9f771 DJ |
101 | } pthread_cond_t; |
102 | ||
103 | typedef union | |
104 | { | |
105 | char __size[__SIZEOF_PTHREAD_CONDATTR_T]; | |
106 | long int __align; | |
107 | } pthread_condattr_t; | |
108 | ||
109 | ||
110 | /* Keys for thread-specific data */ | |
111 | typedef unsigned int pthread_key_t; | |
112 | ||
113 | ||
114 | /* Once-only execution */ | |
115 | typedef int pthread_once_t; | |
116 | ||
117 | ||
118 | #if defined __USE_UNIX98 || defined __USE_XOPEN2K | |
119 | /* Data structure for read-write lock variable handling. The | |
120 | structure of the attribute type is not exposed on purpose. */ | |
121 | typedef union | |
122 | { | |
123 | struct | |
124 | { | |
125 | int __lock; | |
126 | unsigned int __nr_readers; | |
127 | unsigned int __readers_wakeup; | |
128 | unsigned int __writer_wakeup; | |
129 | unsigned int __nr_readers_queued; | |
130 | unsigned int __nr_writers_queued; | |
30efab51 DJ |
131 | #if __BYTE_ORDER == __BIG_ENDIAN |
132 | unsigned char __pad1; | |
133 | unsigned char __pad2; | |
134 | unsigned char __shared; | |
135 | /* FLAGS must stay at this position in the structure to maintain | |
136 | binary compatibility. */ | |
137 | unsigned char __flags; | |
138 | #else | |
02a9f771 DJ |
139 | /* FLAGS must stay at this position in the structure to maintain |
140 | binary compatibility. */ | |
30efab51 DJ |
141 | unsigned char __flags; |
142 | unsigned char __shared; | |
143 | unsigned char __pad1; | |
144 | unsigned char __pad2; | |
145 | #endif | |
02a9f771 DJ |
146 | int __writer; |
147 | } __data; | |
148 | char __size[__SIZEOF_PTHREAD_RWLOCK_T]; | |
149 | long int __align; | |
150 | } pthread_rwlock_t; | |
151 | ||
152 | typedef union | |
153 | { | |
154 | char __size[__SIZEOF_PTHREAD_RWLOCKATTR_T]; | |
155 | long int __align; | |
156 | } pthread_rwlockattr_t; | |
157 | #endif | |
158 | ||
159 | ||
160 | #ifdef __USE_XOPEN2K | |
161 | /* POSIX spinlock data type. */ | |
162 | typedef volatile int pthread_spinlock_t; | |
163 | ||
164 | ||
165 | /* POSIX barriers data type. The structure of the type is | |
166 | deliberately not exposed. */ | |
167 | typedef union | |
168 | { | |
169 | char __size[__SIZEOF_PTHREAD_BARRIER_T]; | |
170 | long int __align; | |
171 | } pthread_barrier_t; | |
172 | ||
173 | typedef union | |
174 | { | |
175 | char __size[__SIZEOF_PTHREAD_BARRIERATTR_T]; | |
176 | int __align; | |
177 | } pthread_barrierattr_t; | |
178 | #endif | |
179 | ||
180 | ||
181 | #endif /* bits/pthreadtypes.h */ |