Deleted Added
full compact
pthread.h (311234) pthread.h (315282)
1/*
2 * Copyright (c) 1993, 1994 by Chris Provenzano, proven@mit.edu
3 * Copyright (c) 1995-1998 by John Birrell <jb@cimlogic.com.au>
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:

--- 16 unchanged lines hidden (view full) ---

25 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 *
1/*
2 * Copyright (c) 1993, 1994 by Chris Provenzano, proven@mit.edu
3 * Copyright (c) 1995-1998 by John Birrell <jb@cimlogic.com.au>
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:

--- 16 unchanged lines hidden (view full) ---

25 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 *
33 * $FreeBSD: stable/11/include/pthread.h 311234 2017-01-04 02:51:39Z pfg $
33 * $FreeBSD: stable/11/include/pthread.h 315282 2017-03-14 20:14:57Z pfg $
34 */
35#ifndef _PTHREAD_H_
36#define _PTHREAD_H_
37
38/*
39 * Header files.
40 */
41#include <sys/cdefs.h>
42#include <sys/_pthreadtypes.h>
43#include <machine/_limits.h>
44#include <machine/_types.h>
45#include <sys/_sigset.h>
46#include <sched.h>
47#include <time.h>
48
34 */
35#ifndef _PTHREAD_H_
36#define _PTHREAD_H_
37
38/*
39 * Header files.
40 */
41#include <sys/cdefs.h>
42#include <sys/_pthreadtypes.h>
43#include <machine/_limits.h>
44#include <machine/_types.h>
45#include <sys/_sigset.h>
46#include <sched.h>
47#include <time.h>
48
49__NULLABILITY_PRAGMA_PUSH
50
49/*
50 * Run-time invariant values:
51 */
52#define PTHREAD_DESTRUCTOR_ITERATIONS 4
53#define PTHREAD_KEYS_MAX 256
54#define PTHREAD_STACK_MIN __MINSIGSTKSZ
55#define PTHREAD_THREADS_MAX __ULONG_MAX
56#define PTHREAD_BARRIER_SERIAL_THREAD -1

--- 85 unchanged lines hidden (view full) ---

142 __uintptr_t pthread_cleanup_pad[8];
143};
144
145/*
146 * Thread function prototype definitions:
147 */
148__BEGIN_DECLS
149int pthread_atfork(void (*)(void), void (*)(void), void (*)(void));
51/*
52 * Run-time invariant values:
53 */
54#define PTHREAD_DESTRUCTOR_ITERATIONS 4
55#define PTHREAD_KEYS_MAX 256
56#define PTHREAD_STACK_MIN __MINSIGSTKSZ
57#define PTHREAD_THREADS_MAX __ULONG_MAX
58#define PTHREAD_BARRIER_SERIAL_THREAD -1

--- 85 unchanged lines hidden (view full) ---

144 __uintptr_t pthread_cleanup_pad[8];
145};
146
147/*
148 * Thread function prototype definitions:
149 */
150__BEGIN_DECLS
151int pthread_atfork(void (*)(void), void (*)(void), void (*)(void));
150int pthread_attr_destroy(pthread_attr_t *);
151int pthread_attr_getstack(const pthread_attr_t * __restrict,
152 void ** __restrict, size_t * __restrict);
153int pthread_attr_getstacksize(const pthread_attr_t *, size_t *);
154int pthread_attr_getguardsize(const pthread_attr_t *, size_t *);
152int pthread_attr_destroy(pthread_attr_t * _Nonnull);
153int pthread_attr_getstack(
154 const pthread_attr_t * _Nonnull __restrict,
155 void ** _Nonnull __restrict,
156 size_t * _Nonnull __restrict);
157int pthread_attr_getstacksize(const pthread_attr_t * _Nonnull,
158 size_t * _Nonnull);
159int pthread_attr_getguardsize(const pthread_attr_t * _Nonnull,
160 size_t * _Nonnull);
155int pthread_attr_getstackaddr(const pthread_attr_t *, void **);
161int pthread_attr_getstackaddr(const pthread_attr_t *, void **);
156int pthread_attr_getdetachstate(const pthread_attr_t *, int *);
157int pthread_attr_init(pthread_attr_t *);
158int pthread_attr_setstacksize(pthread_attr_t *, size_t);
159int pthread_attr_setguardsize(pthread_attr_t *, size_t);
160int pthread_attr_setstack(pthread_attr_t *, void *, size_t);
162int pthread_attr_getdetachstate(const pthread_attr_t * _Nonnull,
163 int * _Nonnull);
164int pthread_attr_init(pthread_attr_t * _Nonnull);
165int pthread_attr_setstacksize(pthread_attr_t * _Nonnull, size_t);
166int pthread_attr_setguardsize(pthread_attr_t * _Nonnull, size_t);
167int pthread_attr_setstack(pthread_attr_t * _Nonnull, void *,
168 size_t);
161int pthread_attr_setstackaddr(pthread_attr_t *, void *);
169int pthread_attr_setstackaddr(pthread_attr_t *, void *);
162int pthread_attr_setdetachstate(pthread_attr_t *, int);
163int pthread_barrier_destroy(pthread_barrier_t *);
164int pthread_barrier_init(pthread_barrier_t *,
170int pthread_attr_setdetachstate(pthread_attr_t * _Nonnull, int);
171int pthread_barrier_destroy(pthread_barrier_t * _Nonnull);
172int pthread_barrier_init(pthread_barrier_t * _Nonnull,
165 const pthread_barrierattr_t *, unsigned);
173 const pthread_barrierattr_t *, unsigned);
166int pthread_barrier_wait(pthread_barrier_t *);
167int pthread_barrierattr_destroy(pthread_barrierattr_t *);
168int pthread_barrierattr_getpshared(const pthread_barrierattr_t *,
169 int *);
170int pthread_barrierattr_init(pthread_barrierattr_t *);
171int pthread_barrierattr_setpshared(pthread_barrierattr_t *, int);
174int pthread_barrier_wait(pthread_barrier_t * _Nonnull);
175int pthread_barrierattr_destroy(pthread_barrierattr_t * _Nonnull);
176int pthread_barrierattr_getpshared(
177 const pthread_barrierattr_t * _Nonnull, int * _Nonnull);
178int pthread_barrierattr_init(pthread_barrierattr_t * _Nonnull);
179int pthread_barrierattr_setpshared(pthread_barrierattr_t * _Nonnull,
180 int);
172
173#define pthread_cleanup_push(cleanup_routine, cleanup_arg) \
174 { \
175 struct _pthread_cleanup_info __cleanup_info__; \
176 __pthread_cleanup_push_imp(cleanup_routine, cleanup_arg,\
177 &__cleanup_info__); \
178 {
179
180#define pthread_cleanup_pop(execute) \
181 (void)0; \
182 } \
183 __pthread_cleanup_pop_imp(execute); \
184 }
185
181
182#define pthread_cleanup_push(cleanup_routine, cleanup_arg) \
183 { \
184 struct _pthread_cleanup_info __cleanup_info__; \
185 __pthread_cleanup_push_imp(cleanup_routine, cleanup_arg,\
186 &__cleanup_info__); \
187 {
188
189#define pthread_cleanup_pop(execute) \
190 (void)0; \
191 } \
192 __pthread_cleanup_pop_imp(execute); \
193 }
194
186int pthread_condattr_destroy(pthread_condattr_t *);
187int pthread_condattr_getclock(const pthread_condattr_t *,
188 clockid_t *);
189int pthread_condattr_getpshared(const pthread_condattr_t *, int *);
190int pthread_condattr_init(pthread_condattr_t *);
191int pthread_condattr_setclock(pthread_condattr_t *, clockid_t);
192int pthread_condattr_setpshared(pthread_condattr_t *, int);
193int pthread_cond_broadcast(pthread_cond_t *);
194int pthread_cond_destroy(pthread_cond_t *);
195int pthread_cond_init(pthread_cond_t *,
195int pthread_condattr_destroy(pthread_condattr_t * _Nonnull);
196int pthread_condattr_getclock(const pthread_condattr_t * _Nonnull,
197 clockid_t * _Nonnull);
198int pthread_condattr_getpshared(const pthread_condattr_t * _Nonnull,
199 int * _Nonnull);
200int pthread_condattr_init(pthread_condattr_t * _Nonnull);
201int pthread_condattr_setclock(pthread_condattr_t * _Nonnull,
202 clockid_t);
203int pthread_condattr_setpshared(pthread_condattr_t * _Nonnull, int);
204int pthread_cond_broadcast(pthread_cond_t * _Nonnull);
205int pthread_cond_destroy(pthread_cond_t * _Nonnull);
206int pthread_cond_init(pthread_cond_t * _Nonnull,
196 const pthread_condattr_t *);
207 const pthread_condattr_t *);
197int pthread_cond_signal(pthread_cond_t *);
198int pthread_cond_timedwait(pthread_cond_t *,
199 pthread_mutex_t *__mutex, const struct timespec *)
208int pthread_cond_signal(pthread_cond_t * _Nonnull);
209int pthread_cond_timedwait(pthread_cond_t * _Nonnull,
210 pthread_mutex_t * _Nonnull __mutex,
211 const struct timespec * _Nonnull)
200 __requires_exclusive(*__mutex);
212 __requires_exclusive(*__mutex);
201int pthread_cond_wait(pthread_cond_t *, pthread_mutex_t *__mutex)
213int pthread_cond_wait(pthread_cond_t * _Nonnull,
214 pthread_mutex_t * _Nonnull __mutex)
202 __requires_exclusive(*__mutex);
215 __requires_exclusive(*__mutex);
203int pthread_create(pthread_t *, const pthread_attr_t *,
204 void *(*) (void *), void *);
216int pthread_create(pthread_t * _Nonnull, const pthread_attr_t *,
217 void *(* _Nonnull) (void *), void *);
205int pthread_detach(pthread_t);
206int pthread_equal(pthread_t, pthread_t);
207void pthread_exit(void *) __dead2;
208void *pthread_getspecific(pthread_key_t);
218int pthread_detach(pthread_t);
219int pthread_equal(pthread_t, pthread_t);
220void pthread_exit(void *) __dead2;
221void *pthread_getspecific(pthread_key_t);
209int pthread_getcpuclockid(pthread_t, clockid_t *);
222int pthread_getcpuclockid(pthread_t, clockid_t * _Nonnull);
210int pthread_join(pthread_t, void **);
223int pthread_join(pthread_t, void **);
211int pthread_key_create(pthread_key_t *,
212 void (*) (void *));
224int pthread_key_create(pthread_key_t * _Nonnull,
225 void (*) (void *));
213int pthread_key_delete(pthread_key_t);
226int pthread_key_delete(pthread_key_t);
214int pthread_mutexattr_init(pthread_mutexattr_t *);
215int pthread_mutexattr_destroy(pthread_mutexattr_t *);
216int pthread_mutexattr_getpshared(const pthread_mutexattr_t *,
217 int *);
218int pthread_mutexattr_gettype(pthread_mutexattr_t *, int *);
219int pthread_mutexattr_settype(pthread_mutexattr_t *, int);
220int pthread_mutexattr_setpshared(pthread_mutexattr_t *, int);
221int pthread_mutex_consistent(pthread_mutex_t *__mutex)
222 __nonnull(1) __requires_exclusive(*__mutex);
223int pthread_mutex_destroy(pthread_mutex_t *__mutex)
227int pthread_mutexattr_init(pthread_mutexattr_t * _Nonnull);
228int pthread_mutexattr_destroy(pthread_mutexattr_t * _Nonnull);
229int pthread_mutexattr_getpshared(
230 const pthread_mutexattr_t * _Nonnull, int * _Nonnull);
231int pthread_mutexattr_gettype(pthread_mutexattr_t * _Nonnull,
232 int * _Nonnull);
233int pthread_mutexattr_settype(pthread_mutexattr_t * _Nonnull, int);
234int pthread_mutexattr_setpshared(pthread_mutexattr_t * _Nonnull,
235 int);
236int pthread_mutex_consistent(pthread_mutex_t * _Nonnull __mutex)
237 __requires_exclusive(*__mutex);
238int pthread_mutex_destroy(pthread_mutex_t * _Nonnull __mutex)
224 __requires_unlocked(*__mutex);
239 __requires_unlocked(*__mutex);
225int pthread_mutex_init(pthread_mutex_t *__mutex,
226 const pthread_mutexattr_t *)
240int pthread_mutex_init(pthread_mutex_t * _Nonnull __mutex,
241 const pthread_mutexattr_t *)
227 __requires_unlocked(*__mutex);
242 __requires_unlocked(*__mutex);
228int pthread_mutex_lock(pthread_mutex_t *__mutex)
229 __locks_exclusive(*__mutex);
230int pthread_mutex_trylock(pthread_mutex_t *__mutex)
231 __trylocks_exclusive(0, *__mutex);
232int pthread_mutex_timedlock(pthread_mutex_t *__mutex,
233 const struct timespec *)
234 __trylocks_exclusive(0, *__mutex);
235int pthread_mutex_unlock(pthread_mutex_t *__mutex)
243int pthread_mutex_lock(pthread_mutex_t * _Nonnull __mutex)
244 __locks_exclusive(*__mutex);
245int pthread_mutex_trylock(pthread_mutex_t * _Nonnull __mutex)
246 __trylocks_exclusive(0, *__mutex);
247int pthread_mutex_timedlock(pthread_mutex_t * _Nonnull __mutex,
248 const struct timespec * _Nonnull)
249 __trylocks_exclusive(0, *__mutex);
250int pthread_mutex_unlock(pthread_mutex_t * _Nonnull __mutex)
236 __unlocks(*__mutex);
251 __unlocks(*__mutex);
237int pthread_once(pthread_once_t *, void (*) (void));
238int pthread_rwlock_destroy(pthread_rwlock_t *__rwlock)
252int pthread_once(pthread_once_t * _Nonnull,
253 void (* _Nonnull) (void));
254int pthread_rwlock_destroy(pthread_rwlock_t * _Nonnull __rwlock)
239 __requires_unlocked(*__rwlock);
255 __requires_unlocked(*__rwlock);
240int pthread_rwlock_init(pthread_rwlock_t *__rwlock,
241 const pthread_rwlockattr_t *)
256int pthread_rwlock_init(pthread_rwlock_t * _Nonnull __rwlock,
257 const pthread_rwlockattr_t *)
242 __requires_unlocked(*__rwlock);
258 __requires_unlocked(*__rwlock);
243int pthread_rwlock_rdlock(pthread_rwlock_t *__rwlock)
244 __locks_shared(*__rwlock);
245int pthread_rwlock_timedrdlock(pthread_rwlock_t *__rwlock,
246 const struct timespec *)
247 __trylocks_shared(0, *__rwlock);
248int pthread_rwlock_timedwrlock(pthread_rwlock_t *__rwlock,
249 const struct timespec *)
250 __trylocks_exclusive(0, *__rwlock);
251int pthread_rwlock_tryrdlock(pthread_rwlock_t *__rwlock)
252 __trylocks_shared(0, *__rwlock);
253int pthread_rwlock_trywrlock(pthread_rwlock_t *__rwlock)
254 __trylocks_exclusive(0, *__rwlock);
255int pthread_rwlock_unlock(pthread_rwlock_t *__rwlock)
259int pthread_rwlock_rdlock(pthread_rwlock_t * _Nonnull __rwlock)
260 __locks_shared(*__rwlock);
261int pthread_rwlock_timedrdlock(pthread_rwlock_t * _Nonnull __rwlock,
262 const struct timespec * _Nonnull)
263 __trylocks_shared(0, *__rwlock);
264int pthread_rwlock_timedwrlock(pthread_rwlock_t * _Nonnull __rwlock,
265 const struct timespec * _Nonnull)
266 __trylocks_exclusive(0, *__rwlock);
267int pthread_rwlock_tryrdlock(pthread_rwlock_t * _Nonnull __rwlock)
268 __trylocks_shared(0, *__rwlock);
269int pthread_rwlock_trywrlock(pthread_rwlock_t * _Nonnull __rwlock)
270 __trylocks_exclusive(0, *__rwlock);
271int pthread_rwlock_unlock(pthread_rwlock_t * _Nonnull __rwlock)
256 __unlocks(*__rwlock);
272 __unlocks(*__rwlock);
257int pthread_rwlock_wrlock(pthread_rwlock_t *__rwlock)
258 __locks_exclusive(*__rwlock);
259int pthread_rwlockattr_destroy(pthread_rwlockattr_t *);
260int pthread_rwlockattr_getkind_np(const pthread_rwlockattr_t *,
261 int *);
262int pthread_rwlockattr_getpshared(const pthread_rwlockattr_t *,
263 int *);
264int pthread_rwlockattr_init(pthread_rwlockattr_t *);
265int pthread_rwlockattr_setkind_np(pthread_rwlockattr_t *, int);
266int pthread_rwlockattr_setpshared(pthread_rwlockattr_t *, int);
273int pthread_rwlock_wrlock(pthread_rwlock_t * _Nonnull __rwlock)
274 __locks_exclusive(*__rwlock);
275int pthread_rwlockattr_destroy(pthread_rwlockattr_t * _Nonnull);
276int pthread_rwlockattr_getkind_np(
277 const pthread_rwlockattr_t * _Nonnull, int *);
278int pthread_rwlockattr_getpshared(
279 const pthread_rwlockattr_t * _Nonnull, int * _Nonnull);
280int pthread_rwlockattr_init(pthread_rwlockattr_t * _Nonnull);
281int pthread_rwlockattr_setkind_np(pthread_rwlockattr_t * _Nonnull,
282 int);
283int pthread_rwlockattr_setpshared(pthread_rwlockattr_t * _Nonnull,
284 int);
267pthread_t pthread_self(void);
268int pthread_setspecific(pthread_key_t, const void *);
269
285pthread_t pthread_self(void);
286int pthread_setspecific(pthread_key_t, const void *);
287
270int pthread_spin_init(pthread_spinlock_t *__spin, int)
288int pthread_spin_init(pthread_spinlock_t * _Nonnull __spin, int)
271 __requires_unlocked(*__spin);
289 __requires_unlocked(*__spin);
272int pthread_spin_destroy(pthread_spinlock_t *__spin)
290int pthread_spin_destroy(pthread_spinlock_t * _Nonnull __spin)
273 __requires_unlocked(*__spin);
291 __requires_unlocked(*__spin);
274int pthread_spin_lock(pthread_spinlock_t *__spin)
275 __locks_exclusive(*__spin);
276int pthread_spin_trylock(pthread_spinlock_t *__spin)
277 __trylocks_exclusive(0, *__spin);
278int pthread_spin_unlock(pthread_spinlock_t *__spin)
279 __unlocks(*__spin);
292int pthread_spin_lock(pthread_spinlock_t * _Nonnull __spin)
293 __locks_exclusive(*__spin);
294int pthread_spin_trylock(pthread_spinlock_t * _Nonnull __spin)
295 __trylocks_exclusive(0, *__spin);
296int pthread_spin_unlock(pthread_spinlock_t * _Nonnull __spin)
297 __unlocks(*__spin);
280int pthread_cancel(pthread_t);
281int pthread_setcancelstate(int, int *);
282int pthread_setcanceltype(int, int *);
283void pthread_testcancel(void);
284
285#if __BSD_VISIBLE
286int pthread_getprio(pthread_t);
287int pthread_setprio(pthread_t, int);
288void pthread_yield(void);
289#endif
290
298int pthread_cancel(pthread_t);
299int pthread_setcancelstate(int, int *);
300int pthread_setcanceltype(int, int *);
301void pthread_testcancel(void);
302
303#if __BSD_VISIBLE
304int pthread_getprio(pthread_t);
305int pthread_setprio(pthread_t, int);
306void pthread_yield(void);
307#endif
308
291int pthread_mutexattr_getprioceiling(pthread_mutexattr_t *,
292 int *);
293int pthread_mutexattr_setprioceiling(pthread_mutexattr_t *,
294 int);
309int pthread_mutexattr_getprioceiling(pthread_mutexattr_t *, int *);
310int pthread_mutexattr_setprioceiling(pthread_mutexattr_t *, int);
295int pthread_mutex_getprioceiling(pthread_mutex_t *, int *);
296int pthread_mutex_setprioceiling(pthread_mutex_t *, int, int *);
297
298int pthread_mutexattr_getprotocol(pthread_mutexattr_t *, int *);
299int pthread_mutexattr_setprotocol(pthread_mutexattr_t *, int);
300
311int pthread_mutex_getprioceiling(pthread_mutex_t *, int *);
312int pthread_mutex_setprioceiling(pthread_mutex_t *, int, int *);
313
314int pthread_mutexattr_getprotocol(pthread_mutexattr_t *, int *);
315int pthread_mutexattr_setprotocol(pthread_mutexattr_t *, int);
316
301int pthread_mutexattr_getrobust(pthread_mutexattr_t *__restrict,
302 int *__restrict) __nonnull_all;
303int pthread_mutexattr_setrobust(pthread_mutexattr_t *, int)
304 __nonnull(1);
317int pthread_mutexattr_getrobust(
318 pthread_mutexattr_t * _Nonnull __restrict,
319 int * _Nonnull __restrict);
320int pthread_mutexattr_setrobust(pthread_mutexattr_t * _Nonnull,
321 int);
305
306int pthread_attr_getinheritsched(const pthread_attr_t *, int *);
322
323int pthread_attr_getinheritsched(const pthread_attr_t *, int *);
307int pthread_attr_getschedparam(const pthread_attr_t *,
308 struct sched_param *);
309int pthread_attr_getschedpolicy(const pthread_attr_t *, int *);
310int pthread_attr_getscope(const pthread_attr_t *, int *);
324int pthread_attr_getschedparam(const pthread_attr_t * _Nonnull,
325 struct sched_param * _Nonnull);
326int pthread_attr_getschedpolicy(const pthread_attr_t * _Nonnull,
327 int * _Nonnull);
328int pthread_attr_getscope(const pthread_attr_t * _Nonnull,
329 int * _Nonnull);
311int pthread_attr_setinheritsched(pthread_attr_t *, int);
330int pthread_attr_setinheritsched(pthread_attr_t *, int);
312int pthread_attr_setschedparam(pthread_attr_t *,
313 const struct sched_param *);
314int pthread_attr_setschedpolicy(pthread_attr_t *, int);
315int pthread_attr_setscope(pthread_attr_t *, int);
316int pthread_getschedparam(pthread_t pthread, int *,
317 struct sched_param *);
331int pthread_attr_setschedparam(pthread_attr_t * _Nonnull,
332 const struct sched_param * _Nonnull);
333int pthread_attr_setschedpolicy(pthread_attr_t * _Nonnull, int);
334int pthread_attr_setscope(pthread_attr_t * _Nonnull, int);
335int pthread_getschedparam(pthread_t pthread, int * _Nonnull,
336 struct sched_param * _Nonnull);
318int pthread_setschedparam(pthread_t, int,
337int pthread_setschedparam(pthread_t, int,
319 const struct sched_param *);
338 const struct sched_param * _Nonnull);
320#if __XSI_VISIBLE
321int pthread_getconcurrency(void);
322int pthread_setconcurrency(int);
323#endif
324
325void __pthread_cleanup_push_imp(void (*)(void *), void *,
326 struct _pthread_cleanup_info *);
327void __pthread_cleanup_pop_imp(int);
328__END_DECLS
339#if __XSI_VISIBLE
340int pthread_getconcurrency(void);
341int pthread_setconcurrency(int);
342#endif
343
344void __pthread_cleanup_push_imp(void (*)(void *), void *,
345 struct _pthread_cleanup_info *);
346void __pthread_cleanup_pop_imp(int);
347__END_DECLS
348__NULLABILITY_PRAGMA_POP
329
349
330#endif
350#endif /* _PTHREAD_H_ */