pthreadtypes.h
001:
002:
003: <drepper@redhat.com>
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
017:
018:
019:
020: #ifndef _BITS_PTHREADTYPES_H
021: #define _BITS_PTHREADTYPES_H 1
022:
023: #include <bits/wordsize.h>
024:
025: #if __WORDSIZE == 64
026: # define __SIZEOF_PTHREAD_ATTR_T 56
027: # define __SIZEOF_PTHREAD_MUTEX_T 40
028: # define __SIZEOF_PTHREAD_MUTEXATTR_T 4
029: # define __SIZEOF_PTHREAD_COND_T 48
030: # define __SIZEOF_PTHREAD_CONDATTR_T 4
031: # define __SIZEOF_PTHREAD_RWLOCK_T 56
032: # define __SIZEOF_PTHREAD_RWLOCKATTR_T 8
033: # define __SIZEOF_PTHREAD_BARRIER_T 32
034: # define __SIZEOF_PTHREAD_BARRIERATTR_T 4
035: #else
036: # define __SIZEOF_PTHREAD_ATTR_T 36
037: # define __SIZEOF_PTHREAD_MUTEX_T 24
038: # define __SIZEOF_PTHREAD_MUTEXATTR_T 4
039: # define __SIZEOF_PTHREAD_COND_T 48
040: # define __SIZEOF_PTHREAD_CONDATTR_T 4
041: # define __SIZEOF_PTHREAD_RWLOCK_T 32
042: # define __SIZEOF_PTHREAD_RWLOCKATTR_T 8
043: # define __SIZEOF_PTHREAD_BARRIER_T 20
044: # define __SIZEOF_PTHREAD_BARRIERATTR_T 4
045: #endif
046:
047:
048:
049:
050: typedef unsigned long int pthread_t;
051:
052:
053: typedef union
054: {
055: char __size[__SIZEOF_PTHREAD_ATTR_T];
056: long int __align;
057: } pthread_attr_t;
058:
059:
060: #if __WORDSIZE == 64
061: typedef struct __pthread_internal_list
062: {
063: struct __pthread_internal_list *__prev;
064: struct __pthread_internal_list *__next;
065: } __pthread_list_t;
066: #else
067: typedef struct __pthread_internal_slist
068: {
069: struct __pthread_internal_slist *__next;
070: } __pthread_slist_t;
071: #endif
072:
073:
074:
075:
076: typedef union
077: {
078: struct __pthread_mutex_s
079: {
080: int __lock;
081: unsigned int __count;
082: int __owner;
083: #if __WORDSIZE == 64
084: unsigned int __nusers;
085: #endif
086:
087:
088: int __kind;
089: #if __WORDSIZE == 64
090: int __spins;
091: __pthread_list_t __list;
092: # define __PTHREAD_MUTEX_HAVE_PREV 1
093: #else
094: unsigned int __nusers;
095: __extension__ union
096: {
097: int __spins;
098: __pthread_slist_t __list;
099: };
100: #endif
101: } __data;
102: char __size[__SIZEOF_PTHREAD_MUTEX_T];
103: long int __align;
104: } pthread_mutex_t;
105:
106: typedef union
107: {
108: char __size[__SIZEOF_PTHREAD_MUTEXATTR_T];
109: int __align;
110: } pthread_mutexattr_t;
111:
112:
113:
114:
115: typedef union
116: {
117: struct
118: {
119: int __lock;
120: unsigned int __futex;
121: __extension__ unsigned long long int __total_seq;
122: __extension__ unsigned long long int __wakeup_seq;
123: __extension__ unsigned long long int __woken_seq;
124: void *__mutex;
125: unsigned int __nwaiters;
126: unsigned int __broadcast_seq;
127: } __data;
128: char __size[__SIZEOF_PTHREAD_COND_T];
129: __extension__ long long int __align;
130: } pthread_cond_t;
131:
132: typedef union
133: {
134: char __size[__SIZEOF_PTHREAD_CONDATTR_T];
135: int __align;
136: } pthread_condattr_t;
137:
138:
139:
140: typedef unsigned int pthread_key_t;
141:
142:
143:
144: typedef int pthread_once_t;
145:
146:
147: #if defined __USE_UNIX98 || defined __USE_XOPEN2K
148:
149:
150: typedef union
151: {
152: # if __WORDSIZE == 64
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;
161: int __writer;
162: int __shared;
163: unsigned long int __pad1;
164: unsigned long int __pad2;
165:
166:
167: unsigned int __flags;
168: } __data;
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:
179:
180: unsigned char __flags;
181: unsigned char __shared;
182: unsigned char __pad1;
183: unsigned char __pad2;
184: int __writer;
185: } __data;
186: # endif
187: char __size[__SIZEOF_PTHREAD_RWLOCK_T];
188: long int __align;
189: } pthread_rwlock_t;
190:
191: typedef union
192: {
193: char __size[__SIZEOF_PTHREAD_RWLOCKATTR_T];
194: long int __align;
195: } pthread_rwlockattr_t;
196: #endif
197:
198:
199: #ifdef __USE_XOPEN2K
200:
201: typedef volatile int pthread_spinlock_t;
202:
203:
204:
205:
206: typedef union
207: {
208: char __size[__SIZEOF_PTHREAD_BARRIER_T];
209: long int __align;
210: } pthread_barrier_t;
211:
212: typedef union
213: {
214: char __size[__SIZEOF_PTHREAD_BARRIERATTR_T];
215: int __align;
216: } pthread_barrierattr_t;
217: #endif
218:
219:
220: #if __WORDSIZE == 32
221:
222: # define __cleanup_fct_attribute __attribute__ ((__regparm__ (1)))
223: #endif
224:
225: #endif
226:
© Andrew Scott 2006 -
2025,
All Rights Reserved