]> git.ipfire.org Git - thirdparty/glibc.git/blame - nptl/sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h
2.5-18.1
[thirdparty/glibc.git] / nptl / sysdeps / unix / sysv / linux / x86_64 / bits / pthreadtypes.h
CommitLineData
0ecb606c 1/* Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
654dff90
UD
2 This file is part of the GNU C Library.
3 Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
4
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.
9
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.
14
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. */
19
20#ifndef _BITS_PTHREADTYPES_H
21#define _BITS_PTHREADTYPES_H 1
22
6442d5d7
UD
23#include <bits/wordsize.h>
24
25#if __WORDSIZE == 64
26# define __SIZEOF_PTHREAD_ATTR_T 56
27# define __SIZEOF_PTHREAD_MUTEX_T 40
28# define __SIZEOF_PTHREAD_MUTEXATTR_T 4
29# define __SIZEOF_PTHREAD_COND_T 48
30# define __SIZEOF_PTHREAD_CONDATTR_T 4
31# define __SIZEOF_PTHREAD_RWLOCK_T 56
32# define __SIZEOF_PTHREAD_RWLOCKATTR_T 8
33# define __SIZEOF_PTHREAD_BARRIER_T 32
34# define __SIZEOF_PTHREAD_BARRIERATTR_T 4
35#else
36# define __SIZEOF_PTHREAD_ATTR_T 36
37# define __SIZEOF_PTHREAD_MUTEX_T 24
38# define __SIZEOF_PTHREAD_MUTEXATTR_T 4
39# define __SIZEOF_PTHREAD_COND_T 48
40# define __SIZEOF_PTHREAD_CONDATTR_T 4
41# define __SIZEOF_PTHREAD_RWLOCK_T 32
42# define __SIZEOF_PTHREAD_RWLOCKATTR_T 8
43# define __SIZEOF_PTHREAD_BARRIER_T 20
44# define __SIZEOF_PTHREAD_BARRIERATTR_T 4
45#endif
654dff90
UD
46
47
48/* Thread identifiers. The structure of the attribute type is not
49 exposed on purpose. */
806e4a4a 50typedef unsigned long int pthread_t;
654dff90
UD
51
52
53typedef union
54{
55 char __size[__SIZEOF_PTHREAD_ATTR_T];
56 long int __align;
57} pthread_attr_t;
58
59
0ecb606c
JJ
60#if __WORDSIZE == 64
61typedef struct __pthread_internal_list
62{
63 struct __pthread_internal_list *__prev;
64 struct __pthread_internal_list *__next;
65} __pthread_list_t;
66#else
67typedef struct __pthread_internal_slist
68{
69 struct __pthread_internal_slist *__next;
70} __pthread_slist_t;
71#endif
72
73
654dff90
UD
74/* Data structures for mutex handling. The structure of the attribute
75 type is not exposed on purpose. */
76typedef union
77{
0ecb606c 78 struct __pthread_mutex_s
654dff90
UD
79 {
80 int __lock;
81 unsigned int __count;
61623643 82 int __owner;
6442d5d7 83#if __WORDSIZE == 64
61623643 84 unsigned int __nusers;
6442d5d7 85#endif
654dff90
UD
86 /* KIND must stay at this position in the structure to maintain
87 binary compatibility. */
88 int __kind;
0ecb606c
JJ
89#if __WORDSIZE == 64
90 int __spins;
91 __pthread_list_t __list;
92# define __PTHREAD_MUTEX_HAVE_PREV 1
93#else
6442d5d7 94 unsigned int __nusers;
0ecb606c
JJ
95 __extension__ union
96 {
97 int __spins;
98 __pthread_slist_t __list;
99 };
6442d5d7 100#endif
654dff90
UD
101 } __data;
102 char __size[__SIZEOF_PTHREAD_MUTEX_T];
103 long int __align;
104} pthread_mutex_t;
105
106typedef union
107{
108 char __size[__SIZEOF_PTHREAD_MUTEXATTR_T];
7da168bf 109 int __align;
654dff90
UD
110} pthread_mutexattr_t;
111
112
113/* Data structure for conditional variable handling. The structure of
114 the attribute type is not exposed on purpose. */
115typedef union
116{
117 struct
118 {
119 int __lock;
75fccede 120 unsigned int __futex;
e9f4e844
UD
121 __extension__ unsigned long long int __total_seq;
122 __extension__ unsigned long long int __wakeup_seq;
123 __extension__ unsigned long long int __woken_seq;
69431c9a 124 void *__mutex;
c56da3a3 125 unsigned int __nwaiters;
893a3511 126 unsigned int __broadcast_seq;
654dff90
UD
127 } __data;
128 char __size[__SIZEOF_PTHREAD_COND_T];
e9f4e844 129 __extension__ long long int __align;
654dff90
UD
130} pthread_cond_t;
131
132typedef union
133{
134 char __size[__SIZEOF_PTHREAD_CONDATTR_T];
7da168bf 135 int __align;
654dff90
UD
136} pthread_condattr_t;
137
138
139/* Keys for thread-specific data */
140typedef unsigned int pthread_key_t;
141
142
143/* Once-only execution */
144typedef int pthread_once_t;
145
146
ccc63b07 147#if defined __USE_UNIX98 || defined __USE_XOPEN2K
654dff90
UD
148/* Data structure for read-write lock variable handling. The
149 structure of the attribute type is not exposed on purpose. */
150typedef union
151{
6442d5d7 152# if __WORDSIZE == 64
654dff90
UD
153 struct
154 {
155 int __lock;
156 unsigned int __nr_readers;
157 unsigned int __readers_wakeup;
158 unsigned int __writer_wakeup;
159 unsigned int __nr_readers_queued;
160 unsigned int __nr_writers_queued;
4ad0bbf4
UD
161 int __writer;
162 int __pad1;
69278ade 163 unsigned long int __pad2;
4ad0bbf4 164 unsigned long int __pad3;
654dff90
UD
165 /* FLAGS must stay at this position in the structure to maintain
166 binary compatibility. */
167 unsigned int __flags;
168 } __data;
6442d5d7
UD
169# else
170 struct
171 {
172 int __lock;
173 unsigned int __nr_readers;
174 unsigned int __readers_wakeup;
175 unsigned int __writer_wakeup;
176 unsigned int __nr_readers_queued;
177 unsigned int __nr_writers_queued;
178 /* FLAGS must stay at this position in the structure to maintain
179 binary compatibility. */
180 unsigned int __flags;
181 int __writer;
182 } __data;
183# endif
654dff90
UD
184 char __size[__SIZEOF_PTHREAD_RWLOCK_T];
185 long int __align;
186} pthread_rwlock_t;
187
188typedef union
189{
190 char __size[__SIZEOF_PTHREAD_RWLOCKATTR_T];
191 long int __align;
192} pthread_rwlockattr_t;
193#endif
194
195
196#ifdef __USE_XOPEN2K
197/* POSIX spinlock data type. */
198typedef volatile int pthread_spinlock_t;
199
200
201/* POSIX barriers data type. The structure of the type is
202 deliberately not exposed. */
203typedef union
204{
205 char __size[__SIZEOF_PTHREAD_BARRIER_T];
206 long int __align;
207} pthread_barrier_t;
208
209typedef union
210{
211 char __size[__SIZEOF_PTHREAD_BARRIERATTR_T];
212 int __align;
213} pthread_barrierattr_t;
214#endif
215
216
0ecb606c
JJ
217#if __WORDSIZE == 32
218/* Extra attributes for the cleanup functions. */
219# define __cleanup_fct_attribute __attribute__ ((__regparm__ (1)))
220#endif
221
654dff90 222#endif /* bits/pthreadtypes.h */