2 * D header file for POSIX.
4 * Copyright: Copyright Sean Kelly 2005 - 2009.
5 * License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
6 * Authors: Sean Kelly, Alex Rønne Petersen
7 * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition
10 /* Copyright Sean Kelly 2005 - 2009.
11 * Distributed under the Boost Software License, Version 1.0.
12 * (See accompanying file LICENSE or copy at
13 * http://www.boost.org/LICENSE_1_0.txt)
15 module core
.sys
.posix
.pthread
;
17 import core
.sys
.posix
.config
;
18 public import core
.sys
.posix
.sys
.types
;
19 public import core
.sys
.posix
.sched
;
20 public import core
.sys
.posix
.time
;
22 import core
.stdc
.stdint
;
30 else version (WatchOS
)
41 PTHREAD_CANCEL_ASYNCHRONOUS
43 PTHREAD_CANCEL_DEFERRED
44 PTHREAD_CANCEL_DISABLE
46 PTHREAD_COND_INITIALIZER
47 PTHREAD_CREATE_DETACHED
48 PTHREAD_CREATE_JOINABLE
49 PTHREAD_EXPLICIT_SCHED
51 PTHREAD_MUTEX_INITIALIZER
53 PTHREAD_PROCESS_SHARED
54 PTHREAD_PROCESS_PRIVATE
56 int pthread_atfork(void function(), void function(), void function());
57 int pthread_attr_destroy(pthread_attr_t*);
58 int pthread_attr_getdetachstate(const scope pthread_attr_t*, int*);
59 int pthread_attr_getschedparam(const scope pthread_attr_t*, sched_param*);
60 int pthread_attr_init(pthread_attr_t*);
61 int pthread_attr_setdetachstate(pthread_attr_t*, int);
62 int pthread_attr_setschedparam(const scope pthread_attr_t*, sched_param*);
63 int pthread_cancel(pthread_t);
64 void pthread_cleanup_push(void function(void*), void*);
65 void pthread_cleanup_pop(int);
66 int pthread_cond_broadcast(pthread_cond_t*);
67 int pthread_cond_destroy(pthread_cond_t*);
68 int pthread_cond_init(const scope pthread_cond_t*, pthread_condattr_t*);
69 int pthread_cond_signal(pthread_cond_t*);
70 int pthread_cond_timedwait(pthread_cond_t*, pthread_mutex_t*, const scope timespec*);
71 int pthread_cond_wait(pthread_cond_t*, pthread_mutex_t*);
72 int pthread_condattr_destroy(pthread_condattr_t*);
73 int pthread_condattr_init(pthread_condattr_t*);
74 int pthread_create(pthread_t*, const scope pthread_attr_t*, void* function(void*), void*);
75 int pthread_detach(pthread_t);
76 int pthread_equal(pthread_t, pthread_t);
77 void pthread_exit(void*);
78 void* pthread_getspecific(pthread_key_t);
79 int pthread_join(pthread_t, void**);
80 int pthread_key_create(pthread_key_t*, void function(void*));
81 int pthread_key_delete(pthread_key_t);
82 int pthread_mutex_destroy(pthread_mutex_t*);
83 int pthread_mutex_init(pthread_mutex_t*, pthread_mutexattr_t*);
84 int pthread_mutex_lock(pthread_mutex_t*);
85 int pthread_mutex_trylock(pthread_mutex_t*);
86 int pthread_mutex_unlock(pthread_mutex_t*);
87 int pthread_mutexattr_destroy(pthread_mutexattr_t*);
88 int pthread_mutexattr_init(pthread_mutexattr_t*);
89 int pthread_once(pthread_once_t*, void function());
90 int pthread_rwlock_destroy(pthread_rwlock_t*);
91 int pthread_rwlock_init(pthread_rwlock_t*, const scope pthread_rwlockattr_t*);
92 int pthread_rwlock_rdlock(pthread_rwlock_t*);
93 int pthread_rwlock_tryrdlock(pthread_rwlock_t*);
94 int pthread_rwlock_trywrlock(pthread_rwlock_t*);
95 int pthread_rwlock_unlock(pthread_rwlock_t*);
96 int pthread_rwlock_wrlock(pthread_rwlock_t*);
97 int pthread_rwlockattr_destroy(pthread_rwlockattr_t*);
98 int pthread_rwlockattr_init(pthread_rwlockattr_t*);
99 pthread_t pthread_self();
100 int pthread_setcancelstate(int, int*);
101 int pthread_setcanceltype(int, int*);
102 int pthread_setspecific(pthread_key_t, const scope void*);
103 void pthread_testcancel();
105 version (CRuntime_Glibc
)
109 PTHREAD_CANCEL_ENABLE
,
110 PTHREAD_CANCEL_DISABLE
115 PTHREAD_CANCEL_DEFERRED
,
116 PTHREAD_CANCEL_ASYNCHRONOUS
119 enum PTHREAD_CANCELED
= cast(void*) -1;
121 //enum pthread_mutex_t PTHREAD_COND_INITIALIZER = { __LOCK_ALT_INITIALIZER, 0, "", 0 };
125 PTHREAD_CREATE_JOINABLE
,
126 PTHREAD_CREATE_DETACHED
131 PTHREAD_INHERIT_SCHED
,
132 PTHREAD_EXPLICIT_SCHED
135 enum PTHREAD_MUTEX_INITIALIZER
= pthread_mutex_t
.init
;
136 enum PTHREAD_ONCE_INIT
= pthread_once_t
.init
;
140 PTHREAD_PROCESS_PRIVATE
,
141 PTHREAD_PROCESS_SHARED
144 else version (Darwin
)
148 PTHREAD_CANCEL_ENABLE
= 1,
149 PTHREAD_CANCEL_DISABLE
= 0
154 PTHREAD_CANCEL_DEFERRED
= 2,
155 PTHREAD_CANCEL_ASYNCHRONOUS
= 0
158 enum PTHREAD_CANCELED
= cast(void*) -1;
160 //enum pthread_mutex_t PTHREAD_COND_INITIALIZER = { __LOCK_ALT_INITIALIZER, 0, "", 0 };
164 PTHREAD_CREATE_JOINABLE
= 1,
165 PTHREAD_CREATE_DETACHED
= 2
170 PTHREAD_INHERIT_SCHED
= 1,
171 PTHREAD_EXPLICIT_SCHED
= 2
174 enum PTHREAD_MUTEX_INITIALIZER
= pthread_mutex_t(0x32AAABA7);
175 enum PTHREAD_ONCE_INIT
= pthread_once_t(0x30b1bcba);
179 PTHREAD_PROCESS_PRIVATE
= 2,
180 PTHREAD_PROCESS_SHARED
= 1
183 else version (FreeBSD
)
187 PTHREAD_DETACHED
= 0x1,
188 PTHREAD_INHERIT_SCHED
= 0x4,
189 PTHREAD_NOFLOAT
= 0x8,
191 PTHREAD_CREATE_DETACHED
= PTHREAD_DETACHED
,
192 PTHREAD_CREATE_JOINABLE
= 0,
193 PTHREAD_EXPLICIT_SCHED
= 0,
198 PTHREAD_PROCESS_PRIVATE
= 0,
199 PTHREAD_PROCESS_SHARED
= 1,
204 PTHREAD_CANCEL_ENABLE
= 0,
205 PTHREAD_CANCEL_DISABLE
= 1,
206 PTHREAD_CANCEL_DEFERRED
= 0,
207 PTHREAD_CANCEL_ASYNCHRONOUS
= 2,
210 enum PTHREAD_CANCELED
= cast(void*) -1;
212 enum PTHREAD_NEEDS_INIT
= 0;
213 enum PTHREAD_DONE_INIT
= 1;
215 enum PTHREAD_MUTEX_INITIALIZER
= null;
216 enum PTHREAD_ONCE_INIT
= null;
217 enum PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
= null;
218 enum PTHREAD_COND_INITIALIZER
= null;
219 enum PTHREAD_RWLOCK_INITIALIZER
= null;
221 else version (NetBSD
)
226 PTHREAD_INHERIT_SCHED
= 0x0,
228 PTHREAD_CREATE_DETACHED
= 1,
229 PTHREAD_CREATE_JOINABLE
= 0,
230 PTHREAD_EXPLICIT_SCHED
= 1,
235 PTHREAD_PROCESS_PRIVATE
= 0,
236 PTHREAD_PROCESS_SHARED
= 1,
241 PTHREAD_CANCEL_ENABLE
= 0,
242 PTHREAD_CANCEL_DISABLE
= 1,
243 PTHREAD_CANCEL_DEFERRED
= 0,
244 PTHREAD_CANCEL_ASYNCHRONOUS
= 1,
247 enum PTHREAD_CANCELED
= cast(void*) 1;
249 enum PTHREAD_DONE_INIT
= 1;
251 enum PTHREAD_MUTEX_INITIALIZER
= pthread_mutex_t(0x33330003);
253 enum PTHREAD_ONCE_INIT
= pthread_once_t(PTHREAD_MUTEX_INITIALIZER
);
254 enum PTHREAD_COND_INITIALIZER
= pthread_cond_t(0x55550005);
255 enum PTHREAD_RWLOCK_INITIALIZER
= pthread_rwlock_t(0x99990009);
257 else version (OpenBSD
)
261 PTHREAD_DETACHED
= 0x1,
262 PTHREAD_INHERIT_SCHED
= 0x4,
263 PTHREAD_NOFLOAT
= 0x8,
265 PTHREAD_CREATE_DETACHED
= PTHREAD_DETACHED
,
266 PTHREAD_CREATE_JOINABLE
= 0,
267 PTHREAD_EXPLICIT_SCHED
= 0,
272 PTHREAD_PROCESS_PRIVATE
= 0,
273 PTHREAD_PROCESS_SHARED
= 1,
278 PTHREAD_CANCEL_ENABLE
= 0,
279 PTHREAD_CANCEL_DISABLE
= 1,
280 PTHREAD_CANCEL_DEFERRED
= 0,
281 PTHREAD_CANCEL_ASYNCHRONOUS
= 2,
284 enum PTHREAD_CANCELED
= cast(void*) 1;
288 PTHREAD_NEEDS_INIT
= 0,
289 PTHREAD_DONE_INIT
= 1,
292 enum PTHREAD_MUTEX_INITIALIZER
= null;
293 enum PTHREAD_ONCE_INIT
= pthread_once_t
.init
;
294 enum PTHREAD_COND_INITIALIZER
= null;
295 enum PTHREAD_RWLOCK_INITIALIZER
= null;
297 else version (DragonFlyBSD
)
301 PTHREAD_DETACHED
= 0x1,
302 //PTHREAD_SCOPE_SYSTEM = 0x2, // defined below
303 PTHREAD_INHERIT_SCHED
= 0x4,
304 PTHREAD_NOFLOAT
= 0x8,
306 PTHREAD_CREATE_DETACHED
= PTHREAD_DETACHED
,
307 PTHREAD_CREATE_JOINABLE
= 0,
308 //PTHREAD_SCOPE_PROCESS = 0, // defined below
309 PTHREAD_EXPLICIT_SCHED
= 0,
314 PTHREAD_PROCESS_PRIVATE
= 0,
315 PTHREAD_PROCESS_SHARED
= 1,
320 PTHREAD_CANCEL_ENABLE
= 0,
321 PTHREAD_CANCEL_DISABLE
= 1,
322 PTHREAD_CANCEL_DEFERRED
= 0,
323 PTHREAD_CANCEL_ASYNCHRONOUS
= 2,
326 enum PTHREAD_CANCELED
= cast(void*) -1;
328 enum PTHREAD_NEEDS_INIT
= 0;
329 enum PTHREAD_DONE_INIT
= 1;
331 enum PTHREAD_MUTEX_INITIALIZER
= null;
332 enum PTHREAD_ONCE_INIT
= pthread_once_t
.init
;
333 enum PTHREAD_COND_INITIALIZER
= null;
334 enum PTHREAD_RWLOCK_INITIALIZER
= null;
336 else version (Solaris
)
340 PTHREAD_INHERIT_SCHED
= 0x01,
341 PTHREAD_NOFLOAT
= 0x08,
342 PTHREAD_CREATE_DETACHED
= 0x40,
343 PTHREAD_CREATE_JOINABLE
= 0x00,
344 PTHREAD_EXPLICIT_SCHED
= 0x00,
349 PTHREAD_PROCESS_PRIVATE
= 0,
350 PTHREAD_PROCESS_SHARED
= 1,
355 PTHREAD_CANCEL_ENABLE
= 0,
356 PTHREAD_CANCEL_DISABLE
= 1,
357 PTHREAD_CANCEL_DEFERRED
= 0,
358 PTHREAD_CANCEL_ASYNCHRONOUS
= 2,
361 enum PTHREAD_CANCELED
= cast(void*)-19;
363 enum PTHREAD_MUTEX_INITIALIZER
= pthread_mutex_t
.init
;
364 enum PTHREAD_ONCE_INIT
= pthread_once_t
.init
;
366 else version (CRuntime_Bionic
)
370 PTHREAD_CREATE_JOINABLE
,
371 PTHREAD_CREATE_DETACHED
374 enum PTHREAD_MUTEX_INITIALIZER
= pthread_mutex_t
.init
;
375 enum PTHREAD_ONCE_INIT
= pthread_once_t
.init
;
379 PTHREAD_PROCESS_PRIVATE
,
380 PTHREAD_PROCESS_SHARED
383 else version (CRuntime_Musl
)
387 PTHREAD_CREATE_JOINABLE
= 0,
388 PTHREAD_CREATE_DETACHED
= 1
391 enum PTHREAD_MUTEX_INITIALIZER
= pthread_mutex_t
.init
;
392 enum PTHREAD_ONCE_INIT
= pthread_once_t
.init
;
396 PTHREAD_PROCESS_PRIVATE
= 0,
397 PTHREAD_PROCESS_SHARED
= 1
400 else version (CRuntime_UClibc
)
404 PTHREAD_CANCEL_ENABLE
,
405 PTHREAD_CANCEL_DISABLE
410 PTHREAD_CANCEL_DEFERRED
,
411 PTHREAD_CANCEL_ASYNCHRONOUS
414 enum PTHREAD_CANCELED
= cast(void*) -1;
416 enum PTHREAD_MUTEX_INITIALIZER
= pthread_mutex_t
.init
;
417 enum PTHREAD_ONCE_INIT
= pthread_once_t
.init
;
421 PTHREAD_CREATE_JOINABLE
,
422 PTHREAD_CREATE_DETACHED
427 PTHREAD_INHERIT_SCHED
,
428 PTHREAD_EXPLICIT_SCHED
433 PTHREAD_PROCESS_PRIVATE
,
434 PTHREAD_PROCESS_SHARED
439 static assert(false, "Unsupported platform");
442 int pthread_atfork(void function(), void function(), void function());
444 int pthread_atfork(void function() @nogc, void function() @nogc, void function() @nogc);
445 int pthread_attr_destroy(pthread_attr_t
*);
446 int pthread_attr_getdetachstate(const scope pthread_attr_t
*, int*);
447 int pthread_attr_getschedparam(const scope pthread_attr_t
*, sched_param
*);
448 int pthread_attr_init(pthread_attr_t
*);
449 int pthread_attr_setdetachstate(pthread_attr_t
*, int);
450 int pthread_attr_setschedparam(const scope pthread_attr_t
*, sched_param
*);
451 int pthread_cancel(pthread_t
);
454 alias void function(void*) _pthread_cleanup_routine
;
455 alias void function(void*) @nogc _pthread_cleanup_routine_nogc
;
456 version (CRuntime_Glibc
)
458 struct _pthread_cleanup_buffer
460 _pthread_cleanup_routine __routine
;
463 _pthread_cleanup_buffer
* __prev
;
466 void _pthread_cleanup_push(_pthread_cleanup_buffer
*, _pthread_cleanup_routine
, void*);
467 void _pthread_cleanup_push(_pthread_cleanup_buffer
*, _pthread_cleanup_routine_nogc
, void*) @nogc;
468 void _pthread_cleanup_pop(_pthread_cleanup_buffer
*, int);
470 struct pthread_cleanup
472 _pthread_cleanup_buffer buffer
= void;
474 extern (D
) void push(F
: _pthread_cleanup_routine
)(F routine
, void* arg
)
476 _pthread_cleanup_push( &buffer
, routine
, arg
);
479 extern (D
) void pop()( int execute
)
481 _pthread_cleanup_pop( &buffer
, execute
);
485 else version (Darwin
)
487 struct _pthread_cleanup_buffer
489 _pthread_cleanup_routine __routine
;
491 _pthread_cleanup_buffer
* __next
;
494 struct pthread_cleanup
496 _pthread_cleanup_buffer buffer
= void;
498 extern (D
) void push(F
: _pthread_cleanup_routine
)(F routine
, void* arg
)
500 pthread_t self
= pthread_self();
501 buffer
.__routine
= routine
;
503 buffer
.__next
= cast(_pthread_cleanup_buffer
*) self
.__cleanup_stack
;
504 self
.__cleanup_stack
= cast(pthread_handler_rec
*) &buffer
;
507 extern (D
) void pop()( int execute
)
509 pthread_t self
= pthread_self();
510 self
.__cleanup_stack
= cast(pthread_handler_rec
*) buffer
.__next
;
513 buffer
.__routine( buffer
.__arg
);
518 else version (FreeBSD
)
520 struct _pthread_cleanup_info
522 uintptr_t
[8] pthread_cleanup_pad
;
525 struct pthread_cleanup
527 _pthread_cleanup_info __cleanup_info__
= void;
529 extern (D
) void push(F
: _pthread_cleanup_routine
)(F cleanup_routine
, void* cleanup_arg
)
531 __pthread_cleanup_push_imp( cleanup_routine
, cleanup_arg
, &__cleanup_info__
);
534 extern (D
) void pop()( int execute
)
536 __pthread_cleanup_pop_imp( execute
);
540 void __pthread_cleanup_push_imp(_pthread_cleanup_routine
, void*, _pthread_cleanup_info
*);
541 void __pthread_cleanup_push_imp(_pthread_cleanup_routine_nogc
, void*, _pthread_cleanup_info
*) @nogc;
542 void __pthread_cleanup_pop_imp(int);
544 else version (DragonFlyBSD
)
546 struct _pthread_cleanup_info
548 uintptr_t
[8] pthread_cleanup_pad
;
551 struct pthread_cleanup
553 _pthread_cleanup_info __cleanup_info__
= void;
555 extern (D
) void push()( _pthread_cleanup_routine cleanup_routine
, void* cleanup_arg
)
557 _pthread_cleanup_push( cleanup_routine
, cleanup_arg
, &__cleanup_info__
);
560 extern (D
) void pop()( int execute
)
562 _pthread_cleanup_pop( execute
);
566 void _pthread_cleanup_push(_pthread_cleanup_routine
, void*, _pthread_cleanup_info
*);
567 void _pthread_cleanup_pop(int);
569 else version (NetBSD
)
571 struct _pthread_cleanup_store
573 void*[4] pthread_cleanup_pad
;
576 struct pthread_cleanup
578 _pthread_cleanup_store __cleanup_info__
= void;
580 extern (D
) void push()( _pthread_cleanup_routine cleanup_routine
, void* cleanup_arg
)
582 pthread__cleanup_push( cleanup_routine
, cleanup_arg
, &__cleanup_info__
);
585 extern (D
) void pop()( int execute
)
587 pthread__cleanup_pop( execute
, &__cleanup_info__
);
591 void pthread__cleanup_push(_pthread_cleanup_routine
, void*, void*);
592 void pthread__cleanup_pop(int, void *);
594 else version (OpenBSD
)
596 void pthread_cleanup_push(void function(void*), void*);
597 void pthread_cleanup_pop(int);
599 else version (Solaris
)
603 struct _pthread_cleanup_info
605 uintptr_t
[4] pthread_cleanup_pad
;
608 struct pthread_cleanup
610 _pthread_cleanup_info __cleanup_info__
= void;
612 extern (D
) void push(F
: _pthread_cleanup_routine
)(F cleanup_routine
, void* cleanup_arg
)
614 __pthread_cleanup_push(cleanup_routine
, cleanup_arg
, _getfp(), &__cleanup_info__
);
617 extern (D
) void pop()(int execute
)
619 __pthread_cleanup_pop(execute
, &__cleanup_info__
);
623 void __pthread_cleanup_push(_pthread_cleanup_routine
, void*, caddr_t
, _pthread_cleanup_info
*);
624 void __pthread_cleanup_push(_pthread_cleanup_routine_nogc
, void*, caddr_t
, _pthread_cleanup_info
*) @nogc;
625 void __pthread_cleanup_pop(int, _pthread_cleanup_info
*);
627 else version (CRuntime_Bionic
)
629 struct __pthread_cleanup_t
631 __pthread_cleanup_t
* __cleanup_prev
;
632 _pthread_cleanup_routine __cleanup_routine
;
636 void __pthread_cleanup_push(__pthread_cleanup_t
*, _pthread_cleanup_routine
, void*);
637 void __pthread_cleanup_push(__pthread_cleanup_t
*, _pthread_cleanup_routine_nogc
, void*) @nogc;
638 void __pthread_cleanup_pop(__pthread_cleanup_t
*, int);
640 struct pthread_cleanup
642 __pthread_cleanup_t __cleanup
= void;
644 extern (D
) void push(F
: _pthread_cleanup_routine
)(F routine
, void* arg
)
646 __pthread_cleanup_push( &__cleanup
, routine
, arg
);
649 extern (D
) void pop()( int execute
)
651 __pthread_cleanup_pop( &__cleanup
, execute
);
655 else version (CRuntime_Musl
)
658 _pthread_cleanup_routine f
;
662 void _pthread_cleanup_push(__ptcb
*, _pthread_cleanup_routine
, void*);
663 void _pthread_cleanup_pop(__ptcb
*, int);
665 struct pthread_cleanup
667 __ptcb __cleanup
= void;
669 extern (D
) void push(F
: _pthread_cleanup_routine
)(F routine
, void* arg
)
671 _pthread_cleanup_push( &__cleanup
, routine
, arg
);
674 extern (D
) void pop()( int execute
)
676 _pthread_cleanup_pop( &__cleanup
, execute
);
680 else version (CRuntime_UClibc
)
682 struct _pthread_cleanup_buffer
684 _pthread_cleanup_routine __routine
;
687 _pthread_cleanup_buffer
* __prev
;
690 void _pthread_cleanup_push(_pthread_cleanup_buffer
*, _pthread_cleanup_routine
, void*);
691 void _pthread_cleanup_push(_pthread_cleanup_buffer
*, _pthread_cleanup_routine_nogc
, void*) @nogc;
692 void _pthread_cleanup_pop(_pthread_cleanup_buffer
*, int);
694 struct pthread_cleanup
696 _pthread_cleanup_buffer buffer
= void;
698 extern (D
) void push(F
: _pthread_cleanup_routine
)(F routine
, void* arg
)
700 _pthread_cleanup_push( &buffer
, routine
, arg
);
703 extern (D
) void pop()( int execute
)
705 _pthread_cleanup_pop( &buffer
, execute
);
711 static assert(false, "Unsupported platform");
716 int pthread_cond_broadcast(pthread_cond_t
*);
717 int pthread_cond_destroy(pthread_cond_t
*);
718 int pthread_cond_init(const scope pthread_cond_t
*, pthread_condattr_t
*) @trusted;
719 int pthread_cond_signal(pthread_cond_t
*);
720 int pthread_cond_timedwait(pthread_cond_t
*, pthread_mutex_t
*, const scope timespec
*);
721 int pthread_cond_wait(pthread_cond_t
*, pthread_mutex_t
*);
722 int pthread_condattr_destroy(pthread_condattr_t
*);
723 int pthread_condattr_init(pthread_condattr_t
*);
724 int pthread_create(pthread_t
*, const scope pthread_attr_t
*, void* function(void*), void*);
725 int pthread_detach(pthread_t
);
726 int pthread_equal(pthread_t
, pthread_t
);
727 void pthread_exit(void*);
728 void* pthread_getspecific(pthread_key_t
);
729 int pthread_join(pthread_t
, void**);
730 int pthread_key_create(pthread_key_t
*, void function(void*));
731 int pthread_key_delete(pthread_key_t
);
732 int pthread_mutex_destroy(pthread_mutex_t
*);
733 int pthread_mutex_init(pthread_mutex_t
*, pthread_mutexattr_t
*) @trusted;
734 int pthread_mutex_lock(pthread_mutex_t
*);
735 int pthread_mutex_lock(shared(pthread_mutex_t
)*);
736 int pthread_mutex_trylock(pthread_mutex_t
*);
737 int pthread_mutex_trylock(shared(pthread_mutex_t
)*);
738 int pthread_mutex_unlock(pthread_mutex_t
*);
739 int pthread_mutex_unlock(shared(pthread_mutex_t
)*);
740 int pthread_mutexattr_destroy(pthread_mutexattr_t
*);
741 int pthread_mutexattr_init(pthread_mutexattr_t
*) @trusted;
742 int pthread_once(pthread_once_t
*, void function());
743 int pthread_rwlock_destroy(pthread_rwlock_t
*);
744 int pthread_rwlock_init(pthread_rwlock_t
*, const scope pthread_rwlockattr_t
*);
745 int pthread_rwlock_rdlock(pthread_rwlock_t
*);
746 int pthread_rwlock_tryrdlock(pthread_rwlock_t
*);
747 int pthread_rwlock_trywrlock(pthread_rwlock_t
*);
748 int pthread_rwlock_unlock(pthread_rwlock_t
*);
749 int pthread_rwlock_wrlock(pthread_rwlock_t
*);
750 int pthread_rwlockattr_destroy(pthread_rwlockattr_t
*);
751 int pthread_rwlockattr_init(pthread_rwlockattr_t
*);
752 pthread_t
pthread_self();
753 int pthread_setcancelstate(int, int*);
754 int pthread_setcanceltype(int, int*);
755 int pthread_setspecific(pthread_key_t
, const scope void*);
756 void pthread_testcancel();
762 PTHREAD_BARRIER_SERIAL_THREAD
764 int pthread_barrier_destroy(pthread_barrier_t*);
765 int pthread_barrier_init(pthread_barrier_t*, const scope pthread_barrierattr_t*, uint);
766 int pthread_barrier_wait(pthread_barrier_t*);
767 int pthread_barrierattr_destroy(pthread_barrierattr_t*);
768 int pthread_barrierattr_getpshared(const scope pthread_barrierattr_t*, int*); (BAR|TSH)
769 int pthread_barrierattr_init(pthread_barrierattr_t*);
770 int pthread_barrierattr_setpshared(pthread_barrierattr_t*, int); (BAR|TSH)
773 version (CRuntime_Glibc
)
775 enum PTHREAD_BARRIER_SERIAL_THREAD
= -1;
777 int pthread_barrier_destroy(pthread_barrier_t
*);
778 int pthread_barrier_init(pthread_barrier_t
*, const scope pthread_barrierattr_t
*, uint);
779 int pthread_barrier_wait(pthread_barrier_t
*);
780 int pthread_barrierattr_destroy(pthread_barrierattr_t
*);
781 int pthread_barrierattr_getpshared(const scope pthread_barrierattr_t
*, int*);
782 int pthread_barrierattr_init(pthread_barrierattr_t
*);
783 int pthread_barrierattr_setpshared(pthread_barrierattr_t
*, int);
785 else version (FreeBSD
)
787 enum PTHREAD_BARRIER_SERIAL_THREAD
= -1;
789 int pthread_barrier_destroy(pthread_barrier_t
*);
790 int pthread_barrier_init(pthread_barrier_t
*, const scope pthread_barrierattr_t
*, uint);
791 int pthread_barrier_wait(pthread_barrier_t
*);
792 int pthread_barrierattr_destroy(pthread_barrierattr_t
*);
793 int pthread_barrierattr_getpshared(const scope pthread_barrierattr_t
*, int*);
794 int pthread_barrierattr_init(pthread_barrierattr_t
*);
795 int pthread_barrierattr_setpshared(pthread_barrierattr_t
*, int);
797 else version (DragonFlyBSD
)
799 enum PTHREAD_BARRIER_SERIAL_THREAD
= -1;
800 enum PTHREAD_KEYS_MAX
= 256;
801 enum PTHREAD_STACK_MIN
= 16384;
802 enum PTHREAD_THREADS_MAX
= c_ulong
.max
;
804 int pthread_barrier_destroy(pthread_barrier_t
*);
805 int pthread_barrier_init(pthread_barrier_t
*, const scope pthread_barrierattr_t
*, uint);
806 int pthread_barrier_wait(pthread_barrier_t
*);
807 int pthread_barrierattr_destroy(pthread_barrierattr_t
*);
808 int pthread_barrierattr_getpshared(const scope pthread_barrierattr_t
*, int*);
809 int pthread_barrierattr_init(pthread_barrierattr_t
*);
810 int pthread_barrierattr_setpshared(pthread_barrierattr_t
*, int);
812 else version (NetBSD
)
814 enum PTHREAD_BARRIER_SERIAL_THREAD
= 1234567;
816 int pthread_barrier_destroy(pthread_barrier_t
*);
817 int pthread_barrier_init(pthread_barrier_t
*, const scope pthread_barrierattr_t
*, uint);
818 int pthread_barrier_wait(pthread_barrier_t
*);
819 int pthread_barrierattr_destroy(pthread_barrierattr_t
*);
820 int pthread_barrierattr_getpshared(const scope pthread_barrierattr_t
*, int*);
821 int pthread_barrierattr_init(pthread_barrierattr_t
*);
822 int pthread_barrierattr_setpshared(pthread_barrierattr_t
*, int);
824 else version (OpenBSD
)
826 enum PTHREAD_BARRIER_SERIAL_THREAD
= -1;
828 int pthread_barrier_destroy(pthread_barrier_t
*);
829 int pthread_barrier_init(pthread_barrier_t
*, const scope pthread_barrierattr_t
*, uint);
830 int pthread_barrier_wait(pthread_barrier_t
*);
831 int pthread_barrierattr_destroy(pthread_barrierattr_t
*);
832 int pthread_barrierattr_getpshared(const scope pthread_barrierattr_t
*, int*);
833 int pthread_barrierattr_init(pthread_barrierattr_t
*);
834 int pthread_barrierattr_setpshared(pthread_barrierattr_t
*, int);
836 else version (Darwin
)
839 else version (Solaris
)
841 enum PTHREAD_BARRIER_SERIAL_THREAD
= -2;
843 int pthread_barrier_destroy(pthread_barrier_t
*);
844 int pthread_barrier_init(pthread_barrier_t
*, const scope pthread_barrierattr_t
*, uint);
845 int pthread_barrier_wait(pthread_barrier_t
*);
846 int pthread_barrierattr_destroy(pthread_barrierattr_t
*);
847 int pthread_barrierattr_getpshared(const scope pthread_barrierattr_t
*, int*);
848 int pthread_barrierattr_init(pthread_barrierattr_t
*);
849 int pthread_barrierattr_setpshared(pthread_barrierattr_t
*, int);
851 else version (CRuntime_Bionic
)
854 else version (CRuntime_Musl
)
856 enum PTHREAD_BARRIER_SERIAL_THREAD
= -1;
858 int pthread_barrier_destroy(pthread_barrier_t
*);
859 int pthread_barrier_init(pthread_barrier_t
*, const scope pthread_barrierattr_t
*, uint);
860 int pthread_barrier_wait(pthread_barrier_t
*);
861 int pthread_barrierattr_destroy(pthread_barrierattr_t
*);
862 int pthread_barrierattr_getpshared(const scope pthread_barrierattr_t
*, int*);
863 int pthread_barrierattr_init(pthread_barrierattr_t
*);
864 int pthread_barrierattr_setpshared(pthread_barrierattr_t
*, int);
866 else version (CRuntime_UClibc
)
868 enum PTHREAD_BARRIER_SERIAL_THREAD
= -1;
870 int pthread_barrier_destroy(pthread_barrier_t
*);
871 int pthread_barrier_init(pthread_barrier_t
*, const scope pthread_barrierattr_t
*, uint);
872 int pthread_barrier_wait(pthread_barrier_t
*);
873 int pthread_barrierattr_destroy(pthread_barrierattr_t
*);
874 int pthread_barrierattr_getpshared(const scope pthread_barrierattr_t
*, int*);
875 int pthread_barrierattr_init(pthread_barrierattr_t
*);
876 int pthread_barrierattr_setpshared(pthread_barrierattr_t
*, int);
880 static assert(false, "Unsupported platform");
887 int pthread_condattr_getclock(const scope pthread_condattr_t*, clockid_t*);
888 int pthread_condattr_setclock(pthread_condattr_t*, clockid_t);
890 version (CRuntime_Glibc
)
892 int pthread_condattr_getclock(const scope pthread_condattr_t
*, clockid_t
*);
893 int pthread_condattr_setclock(pthread_condattr_t
*, clockid_t
);
895 else version (FreeBSD
)
897 int pthread_condattr_getclock(const scope pthread_condattr_t
*, clockid_t
*);
898 int pthread_condattr_setclock(pthread_condattr_t
*, clockid_t
);
900 else version (DragonFlyBSD
)
902 int pthread_condattr_getclock(const scope pthread_condattr_t
*, clockid_t
*);
903 int pthread_condattr_setclock(pthread_condattr_t
*, clockid_t
);
905 else version (NetBSD
)
907 int pthread_condattr_setclock(pthread_condattr_t
*, clockid_t
);
909 else version (OpenBSD
)
911 int pthread_condattr_getclock(const scope pthread_condattr_t
*, clockid_t
*);
912 int pthread_condattr_setclock(pthread_condattr_t
*, clockid_t
);
914 else version (Darwin
)
917 else version (Solaris
)
919 int pthread_condattr_getclock(const scope pthread_condattr_t
*, clockid_t
*);
920 int pthread_condattr_setclock(pthread_condattr_t
*, clockid_t
);
922 else version (CRuntime_Bionic
)
925 else version (CRuntime_Musl
)
927 int pthread_condattr_getclock(const scope pthread_condattr_t
*, clockid_t
*);
928 int pthread_condattr_setclock(pthread_condattr_t
*, clockid_t
);
930 else version (CRuntime_UClibc
)
932 int pthread_condattr_getclock(const scope pthread_condattr_t
*, clockid_t
*);
933 int pthread_condattr_setclock(pthread_condattr_t
*, clockid_t
);
937 static assert(false, "Unsupported platform");
944 int pthread_spin_destroy(pthread_spinlock_t*);
945 int pthread_spin_init(pthread_spinlock_t*, int);
946 int pthread_spin_lock(pthread_spinlock_t*);
947 int pthread_spin_trylock(pthread_spinlock_t*);
948 int pthread_spin_unlock(pthread_spinlock_t*);
951 version (CRuntime_Glibc
)
953 int pthread_spin_destroy(pthread_spinlock_t
*);
954 int pthread_spin_init(pthread_spinlock_t
*, int);
955 int pthread_spin_lock(pthread_spinlock_t
*);
956 int pthread_spin_trylock(pthread_spinlock_t
*);
957 int pthread_spin_unlock(pthread_spinlock_t
*);
959 else version (FreeBSD
)
961 int pthread_spin_init(pthread_spinlock_t
*, int);
962 int pthread_spin_destroy(pthread_spinlock_t
*);
963 int pthread_spin_lock(pthread_spinlock_t
*);
964 int pthread_spin_trylock(pthread_spinlock_t
*);
965 int pthread_spin_unlock(pthread_spinlock_t
*);
967 else version (DragonFlyBSD
)
969 int pthread_spin_init(pthread_spinlock_t
*, int);
970 int pthread_spin_destroy(pthread_spinlock_t
*);
971 int pthread_spin_lock(pthread_spinlock_t
*);
972 int pthread_spin_trylock(pthread_spinlock_t
*);
973 int pthread_spin_unlock(pthread_spinlock_t
*);
975 else version (NetBSD
)
977 int pthread_spin_init(pthread_spinlock_t
*, int);
978 int pthread_spin_destroy(pthread_spinlock_t
*);
979 int pthread_spin_lock(pthread_spinlock_t
*);
980 int pthread_spin_trylock(pthread_spinlock_t
*);
981 int pthread_spin_unlock(pthread_spinlock_t
*);
983 else version (OpenBSD
)
985 int pthread_spin_init(pthread_spinlock_t
*, int);
986 int pthread_spin_destroy(pthread_spinlock_t
*);
987 int pthread_spin_lock(pthread_spinlock_t
*);
988 int pthread_spin_trylock(pthread_spinlock_t
*);
989 int pthread_spin_unlock(pthread_spinlock_t
*);
991 else version (Darwin
)
994 else version (Solaris
)
996 int pthread_spin_init(pthread_spinlock_t
*, int);
997 int pthread_spin_destroy(pthread_spinlock_t
*);
998 int pthread_spin_lock(pthread_spinlock_t
*);
999 int pthread_spin_trylock(pthread_spinlock_t
*);
1000 int pthread_spin_unlock(pthread_spinlock_t
*);
1002 else version (CRuntime_Bionic
)
1005 else version (CRuntime_Musl
)
1007 int pthread_spin_destroy(pthread_spinlock_t
*);
1008 int pthread_spin_init(pthread_spinlock_t
*, int);
1009 int pthread_spin_lock(pthread_spinlock_t
*);
1010 int pthread_spin_trylock(pthread_spinlock_t
*);
1011 int pthread_spin_unlock(pthread_spinlock_t
*);
1013 else version (CRuntime_UClibc
)
1015 int pthread_spin_destroy(pthread_spinlock_t
*);
1016 int pthread_spin_init(pthread_spinlock_t
*, int);
1017 int pthread_spin_lock(pthread_spinlock_t
*);
1018 int pthread_spin_trylock(pthread_spinlock_t
*);
1019 int pthread_spin_unlock(pthread_spinlock_t
*);
1023 static assert(false, "Unsupported platform");
1030 PTHREAD_MUTEX_DEFAULT
1031 PTHREAD_MUTEX_ERRORCHECK
1032 PTHREAD_MUTEX_NORMAL
1033 PTHREAD_MUTEX_RECURSIVE
1035 int pthread_attr_getguardsize(const scope pthread_attr_t*, size_t*);
1036 int pthread_attr_setguardsize(pthread_attr_t*, size_t);
1037 int pthread_getconcurrency();
1038 int pthread_mutexattr_gettype(const scope pthread_mutexattr_t*, int*);
1039 int pthread_mutexattr_settype(pthread_mutexattr_t*, int);
1040 int pthread_setconcurrency(int);
1043 version (CRuntime_Glibc
)
1045 enum PTHREAD_MUTEX_NORMAL
= 0;
1046 enum PTHREAD_MUTEX_RECURSIVE
= 1;
1047 enum PTHREAD_MUTEX_ERRORCHECK
= 2;
1048 enum PTHREAD_MUTEX_DEFAULT
= PTHREAD_MUTEX_NORMAL
;
1050 int pthread_attr_getguardsize(const scope pthread_attr_t
*, size_t
*);
1051 int pthread_attr_setguardsize(pthread_attr_t
*, size_t
);
1052 int pthread_getconcurrency();
1053 int pthread_mutexattr_gettype(const scope pthread_mutexattr_t
*, int*);
1054 int pthread_mutexattr_settype(pthread_mutexattr_t
*, int) @trusted;
1055 int pthread_setconcurrency(int);
1057 else version (Darwin
)
1059 enum PTHREAD_MUTEX_NORMAL
= 0;
1060 enum PTHREAD_MUTEX_ERRORCHECK
= 1;
1061 enum PTHREAD_MUTEX_RECURSIVE
= 2;
1062 enum PTHREAD_MUTEX_DEFAULT
= PTHREAD_MUTEX_NORMAL
;
1064 int pthread_attr_getguardsize(const scope pthread_attr_t
*, size_t
*);
1065 int pthread_attr_setguardsize(pthread_attr_t
*, size_t
);
1066 int pthread_getconcurrency();
1067 int pthread_mutexattr_gettype(const scope pthread_mutexattr_t
*, int*);
1068 int pthread_mutexattr_settype(pthread_mutexattr_t
*, int) @trusted;
1069 int pthread_setconcurrency(int);
1071 else version (FreeBSD
)
1075 PTHREAD_MUTEX_ERRORCHECK
= 1,
1076 PTHREAD_MUTEX_RECURSIVE
= 2,
1077 PTHREAD_MUTEX_NORMAL
= 3,
1078 PTHREAD_MUTEX_ADAPTIVE_NP
= 4,
1079 PTHREAD_MUTEX_TYPE_MAX
1081 enum PTHREAD_MUTEX_DEFAULT
= PTHREAD_MUTEX_ERRORCHECK
;
1083 int pthread_attr_getguardsize(const scope pthread_attr_t
*, size_t
*);
1084 int pthread_attr_setguardsize(pthread_attr_t
*, size_t
);
1085 int pthread_getconcurrency();
1086 int pthread_mutexattr_gettype(pthread_mutexattr_t
*, int*);
1087 int pthread_mutexattr_settype(pthread_mutexattr_t
*, int) @trusted;
1088 int pthread_setconcurrency(int);
1090 else version (NetBSD
)
1094 PTHREAD_MUTEX_NORMAL
= 0,
1095 PTHREAD_MUTEX_ERRORCHECK
= 1,
1096 PTHREAD_MUTEX_RECURSIVE
= 2,
1097 PTHREAD_MUTEX_TYPE_MAX
1099 enum PTHREAD_MUTEX_DEFAULT
= PTHREAD_MUTEX_ERRORCHECK
;
1101 int pthread_attr_getguardsize(const scope pthread_attr_t
*, size_t
*);
1102 int pthread_attr_setguardsize(pthread_attr_t
*, size_t
);
1103 int pthread_getconcurrency();
1104 int pthread_mutexattr_gettype(pthread_mutexattr_t
*, int*);
1105 int pthread_mutexattr_settype(pthread_mutexattr_t
*, int) @trusted;
1106 int pthread_setconcurrency(int);
1108 else version (OpenBSD
)
1112 PTHREAD_MUTEX_ERRORCHECK
= 1,
1113 PTHREAD_MUTEX_RECURSIVE
= 2,
1114 PTHREAD_MUTEX_NORMAL
= 3,
1115 PTHREAD_MUTEX_ADAPTIVE_NP
= 4,
1116 PTHREAD_MUTEX_TYPE_MAX
1118 enum PTHREAD_MUTEX_DEFAULT
= PTHREAD_MUTEX_ERRORCHECK
;
1120 int pthread_attr_getguardsize(const scope pthread_attr_t
*, size_t
*);
1121 int pthread_attr_setguardsize(pthread_attr_t
*, size_t
);
1122 int pthread_getconcurrency();
1123 int pthread_mutexattr_gettype(pthread_mutexattr_t
*, int*);
1124 int pthread_mutexattr_settype(pthread_mutexattr_t
*, int) @trusted;
1125 int pthread_setconcurrency(int);
1127 else version (DragonFlyBSD
)
1131 PTHREAD_MUTEX_ERRORCHECK
= 1,
1132 PTHREAD_MUTEX_RECURSIVE
= 2,
1133 PTHREAD_MUTEX_NORMAL
= 3,
1134 PTHREAD_MUTEX_TYPE_MAX
1136 enum PTHREAD_MUTEX_DEFAULT
= PTHREAD_MUTEX_ERRORCHECK
;
1138 int pthread_attr_getguardsize(const scope pthread_attr_t
*, size_t
*);
1139 int pthread_attr_setguardsize(pthread_attr_t
*, size_t
);
1140 int pthread_getconcurrency();
1141 int pthread_mutexattr_gettype(pthread_mutexattr_t
*, int*);
1142 int pthread_mutexattr_settype(pthread_mutexattr_t
*, int) @trusted;
1143 int pthread_setconcurrency(int);
1145 else version (Solaris
)
1149 PTHREAD_MUTEX_ERRORCHECK
= 2,
1150 PTHREAD_MUTEX_RECURSIVE
= 4,
1151 PTHREAD_MUTEX_NORMAL
= 0,
1154 enum PTHREAD_MUTEX_DEFAULT
= PTHREAD_MUTEX_NORMAL
;
1156 int pthread_attr_getguardsize(const scope pthread_attr_t
*, size_t
*);
1157 int pthread_attr_setguardsize(pthread_attr_t
*, size_t
);
1158 int pthread_getconcurrency();
1159 int pthread_mutexattr_gettype(pthread_mutexattr_t
*, int*);
1160 int pthread_mutexattr_settype(pthread_mutexattr_t
*, int) @trusted;
1161 int pthread_setconcurrency(int);
1163 else version (CRuntime_Bionic
)
1165 enum PTHREAD_MUTEX_NORMAL
= 0;
1166 enum PTHREAD_MUTEX_RECURSIVE
= 1;
1167 enum PTHREAD_MUTEX_ERRORCHECK
= 2;
1168 enum PTHREAD_MUTEX_DEFAULT
= PTHREAD_MUTEX_NORMAL
;
1170 int pthread_attr_getguardsize(const scope pthread_attr_t
*, size_t
*);
1171 int pthread_attr_setguardsize(pthread_attr_t
*, size_t
);
1172 int pthread_mutexattr_gettype(const scope pthread_mutexattr_t
*, int*);
1173 int pthread_mutexattr_settype(pthread_mutexattr_t
*, int) @trusted;
1175 else version (CRuntime_Musl
)
1178 PTHREAD_MUTEX_NORMAL
= 0,
1179 PTHREAD_MUTEX_RECURSIVE
= 1,
1180 PTHREAD_MUTEX_ERRORCHECK
= 2,
1181 PTHREAD_MUTEX_DEFAULT
= PTHREAD_MUTEX_NORMAL
,
1183 int pthread_mutexattr_settype(pthread_mutexattr_t
*, int) @trusted;
1185 else version (CRuntime_UClibc
)
1189 PTHREAD_MUTEX_TIMED_NP
,
1190 PTHREAD_MUTEX_RECURSIVE_NP
,
1191 PTHREAD_MUTEX_ERRORCHECK_NP
,
1192 PTHREAD_MUTEX_ADAPTIVE_NP
,
1193 PTHREAD_MUTEX_NORMAL
= PTHREAD_MUTEX_TIMED_NP
,
1194 PTHREAD_MUTEX_RECURSIVE
= PTHREAD_MUTEX_RECURSIVE_NP
,
1195 PTHREAD_MUTEX_ERRORCHECK
= PTHREAD_MUTEX_ERRORCHECK_NP
,
1196 PTHREAD_MUTEX_DEFAULT
= PTHREAD_MUTEX_NORMAL
,
1197 PTHREAD_MUTEX_FAST_NP
= PTHREAD_MUTEX_TIMED_NP
1200 int pthread_attr_getguardsize(const scope pthread_attr_t
*, size_t
*);
1201 int pthread_attr_setguardsize(pthread_attr_t
*, size_t
);
1202 int pthread_getconcurrency();
1203 int pthread_mutexattr_gettype(const scope pthread_mutexattr_t
*, int*);
1204 int pthread_mutexattr_settype(pthread_mutexattr_t
*, int) @trusted;
1205 int pthread_setconcurrency(int);
1209 static assert(false, "Unsupported platform");
1216 int pthread_getcpuclockid(pthread_t, clockid_t*);
1219 version (CRuntime_Glibc
)
1221 int pthread_getcpuclockid(pthread_t
, clockid_t
*);
1223 else version (FreeBSD
)
1225 int pthread_getcpuclockid(pthread_t
, clockid_t
*);
1227 else version (DragonFlyBSD
)
1229 int pthread_getcpuclockid(pthread_t
, clockid_t
*);
1231 else version (NetBSD
)
1234 else version (OpenBSD
)
1236 int pthread_getcpuclockid(pthread_t
, clockid_t
*);
1238 else version (Darwin
)
1241 else version (Solaris
)
1244 else version (CRuntime_Bionic
)
1246 int pthread_getcpuclockid(pthread_t
, clockid_t
*);
1248 else version (CRuntime_Musl
)
1250 int pthread_getcpuclockid(pthread_t
, clockid_t
*);
1252 else version (CRuntime_UClibc
)
1254 int pthread_getcpuclockid(pthread_t
, clockid_t
*);
1258 static assert(false, "Unsupported platform");
1265 int pthread_mutex_timedlock(pthread_mutex_t*, const scope timespec*);
1266 int pthread_rwlock_timedrdlock(pthread_rwlock_t*, const scope timespec*);
1267 int pthread_rwlock_timedwrlock(pthread_rwlock_t*, const scope timespec*);
1270 version (CRuntime_Glibc
)
1272 int pthread_mutex_timedlock(pthread_mutex_t
*, const scope timespec
*);
1273 int pthread_rwlock_timedrdlock(pthread_rwlock_t
*, const scope timespec
*);
1274 int pthread_rwlock_timedwrlock(pthread_rwlock_t
*, const scope timespec
*);
1276 else version (Darwin
)
1278 int pthread_mutex_timedlock(pthread_mutex_t
*, const scope timespec
*);
1279 int pthread_rwlock_timedrdlock(pthread_rwlock_t
*, const scope timespec
*);
1280 int pthread_rwlock_timedwrlock(pthread_rwlock_t
*, const scope timespec
*);
1282 else version (FreeBSD
)
1284 int pthread_mutex_timedlock(pthread_mutex_t
*, const scope timespec
*);
1285 int pthread_rwlock_timedrdlock(pthread_rwlock_t
*, const scope timespec
*);
1286 int pthread_rwlock_timedwrlock(pthread_rwlock_t
*, const scope timespec
*);
1288 else version (NetBSD
)
1290 int pthread_mutex_timedlock(pthread_mutex_t
*, const scope timespec
*);
1291 int pthread_rwlock_timedrdlock(pthread_rwlock_t
*, const scope timespec
*);
1292 int pthread_rwlock_timedwrlock(pthread_rwlock_t
*, const scope timespec
*);
1294 else version (OpenBSD
)
1296 int pthread_mutex_timedlock(pthread_mutex_t
*, const scope timespec
*);
1297 int pthread_rwlock_timedrdlock(pthread_rwlock_t
*, const scope timespec
*);
1298 int pthread_rwlock_timedwrlock(pthread_rwlock_t
*, const scope timespec
*);
1300 else version (DragonFlyBSD
)
1302 int pthread_mutex_timedlock(pthread_mutex_t
*, const scope timespec
*);
1303 int pthread_rwlock_timedrdlock(pthread_rwlock_t
*, const scope timespec
*);
1304 int pthread_rwlock_timedwrlock(pthread_rwlock_t
*, const scope timespec
*);
1306 else version (Solaris
)
1308 int pthread_mutex_timedlock(pthread_mutex_t
*, const scope timespec
*);
1309 int pthread_rwlock_timedrdlock(pthread_rwlock_t
*, const scope timespec
*);
1310 int pthread_rwlock_timedwrlock(pthread_rwlock_t
*, const scope timespec
*);
1312 else version (CRuntime_Bionic
)
1314 int pthread_rwlock_timedrdlock(pthread_rwlock_t
*, const scope timespec
*);
1315 int pthread_rwlock_timedwrlock(pthread_rwlock_t
*, const scope timespec
*);
1317 else version (CRuntime_Musl
)
1319 int pthread_mutex_timedlock(pthread_mutex_t
*, const scope timespec
*);
1320 int pthread_rwlock_timedrdlock(pthread_rwlock_t
*, const scope timespec
*);
1321 int pthread_rwlock_timedwrlock(pthread_rwlock_t
*, const scope timespec
*);
1323 else version (CRuntime_UClibc
)
1325 int pthread_mutex_timedlock(pthread_mutex_t
*, const scope timespec
*);
1326 int pthread_rwlock_timedrdlock(pthread_rwlock_t
*, const scope timespec
*);
1327 int pthread_rwlock_timedwrlock(pthread_rwlock_t
*, const scope timespec
*);
1331 static assert(false, "Unsupported platform");
1335 // Priority (TPI|TPP)
1338 PTHREAD_PRIO_INHERIT (TPI)
1339 PTHREAD_PRIO_NONE (TPP|TPI)
1340 PTHREAD_PRIO_PROTECT (TPI)
1342 int pthread_mutex_getprioceiling(const scope pthread_mutex_t*, int*); (TPP)
1343 int pthread_mutex_setprioceiling(pthread_mutex_t*, int, int*); (TPP)
1344 int pthread_mutexattr_getprioceiling(pthread_mutexattr_t*, int*); (TPP)
1345 int pthread_mutexattr_getprotocol(const scope pthread_mutexattr_t*, int*); (TPI|TPP)
1346 int pthread_mutexattr_setprioceiling(pthread_mutexattr_t*, int); (TPP)
1347 int pthread_mutexattr_setprotocol(pthread_mutexattr_t*, int); (TPI|TPP)
1354 PTHREAD_PRIO_INHERIT
,
1355 PTHREAD_PRIO_PROTECT
1358 int pthread_mutex_getprioceiling(const scope pthread_mutex_t
*, int*);
1359 int pthread_mutex_setprioceiling(pthread_mutex_t
*, int, int*);
1360 int pthread_mutexattr_getprioceiling(const scope pthread_mutexattr_t
*, int*);
1361 int pthread_mutexattr_getprotocol(const scope pthread_mutexattr_t
*, int*);
1362 int pthread_mutexattr_setprioceiling(pthread_mutexattr_t
*, int);
1363 int pthread_mutexattr_setprotocol(pthread_mutexattr_t
*, int);
1365 else version (Solaris
)
1369 PTHREAD_PRIO_NONE
= 0x00,
1370 PTHREAD_PRIO_INHERIT
= 0x10,
1371 PTHREAD_PRIO_PROTECT
= 0x20,
1374 int pthread_mutex_getprioceiling(const scope pthread_mutex_t
*, int*);
1375 int pthread_mutex_setprioceiling(pthread_mutex_t
*, int, int*);
1376 int pthread_mutexattr_getprioceiling(const scope pthread_mutexattr_t
*, int*);
1377 int pthread_mutexattr_getprotocol(const scope pthread_mutexattr_t
*, int*);
1378 int pthread_mutexattr_setprioceiling(pthread_mutexattr_t
*, int);
1379 int pthread_mutexattr_setprotocol(pthread_mutexattr_t
*, int);
1386 PTHREAD_SCOPE_PROCESS
1387 PTHREAD_SCOPE_SYSTEM
1389 int pthread_attr_getinheritsched(const scope pthread_attr_t*, int*);
1390 int pthread_attr_getschedpolicy(const scope pthread_attr_t*, int*);
1391 int pthread_attr_getscope(const scope pthread_attr_t*, int*);
1392 int pthread_attr_setinheritsched(pthread_attr_t*, int);
1393 int pthread_attr_setschedpolicy(pthread_attr_t*, int);
1394 int pthread_attr_setscope(pthread_attr_t*, int);
1395 int pthread_getschedparam(pthread_t, int*, sched_param*);
1396 int pthread_setschedparam(pthread_t, int, const scope sched_param*);
1397 int pthread_setschedprio(pthread_t, int);
1400 version (CRuntime_Glibc
)
1404 PTHREAD_SCOPE_SYSTEM
,
1405 PTHREAD_SCOPE_PROCESS
1408 int pthread_attr_getinheritsched(const scope pthread_attr_t
*, int*);
1409 int pthread_attr_getschedpolicy(const scope pthread_attr_t
*, int*);
1410 int pthread_attr_getscope(const scope pthread_attr_t
*, int*);
1411 int pthread_attr_setinheritsched(pthread_attr_t
*, int);
1412 int pthread_attr_setschedpolicy(pthread_attr_t
*, int);
1413 int pthread_attr_setscope(pthread_attr_t
*, int);
1414 int pthread_getschedparam(pthread_t
, int*, sched_param
*);
1415 int pthread_setschedparam(pthread_t
, int, const scope sched_param
*);
1416 int pthread_setschedprio(pthread_t
, int);
1418 else version (Darwin
)
1422 PTHREAD_SCOPE_SYSTEM
= 1,
1423 PTHREAD_SCOPE_PROCESS
= 2
1426 int pthread_attr_getinheritsched(const scope pthread_attr_t
*, int*);
1427 int pthread_attr_getschedpolicy(const scope pthread_attr_t
*, int*);
1428 int pthread_attr_getscope(const scope pthread_attr_t
*, int*);
1429 int pthread_attr_setinheritsched(pthread_attr_t
*, int);
1430 int pthread_attr_setschedpolicy(pthread_attr_t
*, int);
1431 int pthread_attr_setscope(pthread_attr_t
*, int);
1432 int pthread_getschedparam(pthread_t
, int*, sched_param
*);
1433 int pthread_setschedparam(pthread_t
, int, const scope sched_param
*);
1434 // int pthread_setschedprio(pthread_t, int); // not implemented
1436 else version (FreeBSD
)
1440 PTHREAD_SCOPE_PROCESS
= 0,
1441 PTHREAD_SCOPE_SYSTEM
= 0x2
1444 int pthread_attr_getinheritsched(const scope pthread_attr_t
*, int*);
1445 int pthread_attr_getschedpolicy(const scope pthread_attr_t
*, int*);
1446 int pthread_attr_getscope(const scope pthread_attr_t
*, int*);
1447 int pthread_attr_setinheritsched(pthread_attr_t
*, int);
1448 int pthread_attr_setschedpolicy(pthread_attr_t
*, int);
1449 int pthread_attr_setscope(const scope pthread_attr_t
*, int);
1450 int pthread_getschedparam(pthread_t
, int*, sched_param
*);
1451 int pthread_setschedparam(pthread_t
, int, sched_param
*);
1452 // int pthread_setschedprio(pthread_t, int); // not implemented
1454 else version (NetBSD
)
1458 PTHREAD_SCOPE_PROCESS
= 0,
1459 PTHREAD_SCOPE_SYSTEM
= 0x1
1462 int pthread_attr_getinheritsched(const scope pthread_attr_t
*, int*);
1463 int pthread_attr_getschedpolicy(const scope pthread_attr_t
*, int*);
1464 int pthread_attr_getscope(const scope pthread_attr_t
*, int*);
1465 int pthread_attr_setinheritsched(pthread_attr_t
*, int);
1466 int pthread_attr_setschedpolicy(pthread_attr_t
*, int);
1467 int pthread_attr_setscope(const scope pthread_attr_t
*, int);
1468 int pthread_getschedparam(pthread_t
, int*, sched_param
*);
1469 int pthread_setschedparam(pthread_t
, int, sched_param
*);
1470 //int pthread_setschedprio(pthread_t, int);
1472 else version (OpenBSD
)
1476 PTHREAD_SCOPE_PROCESS
= 0,
1477 PTHREAD_SCOPE_SYSTEM
= 0x2
1480 int pthread_attr_getinheritsched(const scope pthread_attr_t
*, int*);
1481 int pthread_attr_getschedpolicy(const scope pthread_attr_t
*, int*);
1482 int pthread_attr_getscope(const scope pthread_attr_t
*, int*);
1483 int pthread_attr_setinheritsched(pthread_attr_t
*, int);
1484 int pthread_attr_setschedpolicy(pthread_attr_t
*, int);
1485 int pthread_attr_setscope(const scope pthread_attr_t
*, int);
1486 int pthread_getschedparam(pthread_t
, int*, sched_param
*);
1487 int pthread_setschedparam(pthread_t
, int, sched_param
*);
1488 // int pthread_setschedprio(pthread_t, int); // not implemented
1490 else version (DragonFlyBSD
)
1494 PTHREAD_SCOPE_PROCESS
= 0,
1495 PTHREAD_SCOPE_SYSTEM
= 0x2
1498 int pthread_attr_getinheritsched(const scope pthread_attr_t
*, int*);
1499 int pthread_attr_getschedpolicy(const scope pthread_attr_t
*, int*);
1500 int pthread_attr_getscope(const scope pthread_attr_t
*, int*);
1501 int pthread_attr_setinheritsched(pthread_attr_t
*, int);
1502 int pthread_attr_setschedpolicy(pthread_attr_t
*, int);
1503 int pthread_attr_setscope(const scope pthread_attr_t
*, int);
1504 int pthread_getschedparam(pthread_t
, int*, sched_param
*);
1505 int pthread_setschedparam(pthread_t
, int, sched_param
*);
1507 else version (Solaris
)
1511 PTHREAD_SCOPE_PROCESS
= 0,
1512 PTHREAD_SCOPE_SYSTEM
= 1,
1515 int pthread_attr_getinheritsched(const scope pthread_attr_t
*, int*);
1516 int pthread_attr_getschedpolicy(const scope pthread_attr_t
*, int*);
1517 int pthread_attr_getscope(const scope pthread_attr_t
*, int*);
1518 int pthread_attr_setinheritsched(pthread_attr_t
*, int);
1519 int pthread_attr_setschedpolicy(pthread_attr_t
*, int);
1520 int pthread_attr_setscope(const scope pthread_attr_t
*, int);
1521 int pthread_getschedparam(pthread_t
, int*, sched_param
*);
1522 int pthread_setschedparam(pthread_t
, int, sched_param
*);
1523 int pthread_setschedprio(pthread_t
, int);
1525 else version (CRuntime_Bionic
)
1529 PTHREAD_SCOPE_SYSTEM
,
1530 PTHREAD_SCOPE_PROCESS
1533 int pthread_attr_getschedpolicy(const scope pthread_attr_t
*, int*);
1534 int pthread_attr_getscope(const scope pthread_attr_t
*);
1535 int pthread_attr_setschedpolicy(pthread_attr_t
*, int);
1536 int pthread_attr_setscope(pthread_attr_t
*, int);
1537 int pthread_getschedparam(pthread_t
, int*, sched_param
*);
1538 int pthread_setschedparam(pthread_t
, int, const scope sched_param
*);
1540 else version (CRuntime_Musl
)
1544 PTHREAD_SCOPE_SYSTEM
,
1545 PTHREAD_SCOPE_PROCESS
1548 int pthread_getschedparam(pthread_t
, int*, sched_param
*);
1549 int pthread_setschedparam(pthread_t
, int, const scope sched_param
*);
1550 int pthread_setschedprio(pthread_t
, int);
1552 else version (CRuntime_UClibc
)
1556 PTHREAD_SCOPE_SYSTEM
,
1557 PTHREAD_SCOPE_PROCESS
1560 int pthread_attr_getinheritsched(const scope pthread_attr_t
*, int*);
1561 int pthread_attr_getschedpolicy(const scope pthread_attr_t
*, int*);
1562 int pthread_attr_getscope(const scope pthread_attr_t
*, int*);
1563 int pthread_attr_setinheritsched(pthread_attr_t
*, int);
1564 int pthread_attr_setschedpolicy(pthread_attr_t
*, int);
1565 int pthread_attr_setscope(pthread_attr_t
*, int);
1566 int pthread_getschedparam(pthread_t
, int*, sched_param
*);
1567 int pthread_setschedparam(pthread_t
, int, const scope sched_param
*);
1568 int pthread_setschedprio(pthread_t
, int);
1572 static assert(false, "Unsupported platform");
1579 int pthread_attr_getstack(const scope pthread_attr_t*, void**, size_t*); (TSA|TSS)
1580 int pthread_attr_getstackaddr(const scope pthread_attr_t*, void**); (TSA)
1581 int pthread_attr_getstacksize(const scope pthread_attr_t*, size_t*); (TSS)
1582 int pthread_attr_setstack(pthread_attr_t*, void*, size_t); (TSA|TSS)
1583 int pthread_attr_setstackaddr(pthread_attr_t*, void*); (TSA)
1584 int pthread_attr_setstacksize(pthread_attr_t*, size_t); (TSS)
1587 version (CRuntime_Glibc
)
1589 int pthread_attr_getstack(const scope pthread_attr_t
*, void**, size_t
*);
1590 int pthread_attr_getstackaddr(const scope pthread_attr_t
*, void**);
1591 int pthread_attr_getstacksize(const scope pthread_attr_t
*, size_t
*);
1592 int pthread_attr_setstack(pthread_attr_t
*, void*, size_t
);
1593 int pthread_attr_setstackaddr(pthread_attr_t
*, void*);
1594 int pthread_attr_setstacksize(pthread_attr_t
*, size_t
);
1596 else version (Darwin
)
1598 int pthread_attr_getstack(const scope pthread_attr_t
*, void**, size_t
*);
1599 int pthread_attr_getstackaddr(const scope pthread_attr_t
*, void**);
1600 int pthread_attr_getstacksize(const scope pthread_attr_t
*, size_t
*);
1601 int pthread_attr_setstack(pthread_attr_t
*, void*, size_t
);
1602 int pthread_attr_setstackaddr(pthread_attr_t
*, void*);
1603 int pthread_attr_setstacksize(pthread_attr_t
*, size_t
);
1605 else version (FreeBSD
)
1607 int pthread_attr_getstack(const scope pthread_attr_t
*, void**, size_t
*);
1608 int pthread_attr_getstackaddr(const scope pthread_attr_t
*, void**);
1609 int pthread_attr_getstacksize(const scope pthread_attr_t
*, size_t
*);
1610 int pthread_attr_setstack(pthread_attr_t
*, void*, size_t
);
1611 int pthread_attr_setstackaddr(pthread_attr_t
*, void*);
1612 int pthread_attr_setstacksize(pthread_attr_t
*, size_t
);
1614 else version (NetBSD
)
1616 int pthread_attr_getstack(const scope pthread_attr_t
*, void**, size_t
*);
1617 int pthread_attr_getstackaddr(const scope pthread_attr_t
*, void**);
1618 int pthread_attr_getstacksize(const scope pthread_attr_t
*, size_t
*);
1619 int pthread_attr_setstack(pthread_attr_t
*, void*, size_t
);
1620 int pthread_attr_setstackaddr(pthread_attr_t
*, void*);
1621 int pthread_attr_setstacksize(pthread_attr_t
*, size_t
);
1623 else version (OpenBSD
)
1625 int pthread_attr_getstack(const scope pthread_attr_t
*, void**, size_t
*);
1626 int pthread_attr_getstackaddr(const scope pthread_attr_t
*, void**);
1627 int pthread_attr_getstacksize(const scope pthread_attr_t
*, size_t
*);
1628 int pthread_attr_setstack(pthread_attr_t
*, void*, size_t
);
1629 int pthread_attr_setstackaddr(pthread_attr_t
*, void*);
1630 int pthread_attr_setstacksize(pthread_attr_t
*, size_t
);
1632 else version (DragonFlyBSD
)
1634 int pthread_attr_getstack(const scope pthread_attr_t
*, void**, size_t
*);
1635 int pthread_attr_getstackaddr(const scope pthread_attr_t
*, void**);
1636 int pthread_attr_getstacksize(const scope pthread_attr_t
*, size_t
*);
1637 int pthread_attr_setstack(pthread_attr_t
*, void*, size_t
);
1638 int pthread_attr_setstackaddr(pthread_attr_t
*, void*);
1639 int pthread_attr_setstacksize(pthread_attr_t
*, size_t
);
1641 else version (Solaris
)
1643 int pthread_attr_getstack(const scope pthread_attr_t
*, void**, size_t
*);
1644 int pthread_attr_getstackaddr(const scope pthread_attr_t
*, void**);
1645 int pthread_attr_getstacksize(const scope pthread_attr_t
*, size_t
*);
1646 int pthread_attr_setstack(pthread_attr_t
*, void*, size_t
);
1647 int pthread_attr_setstackaddr(pthread_attr_t
*, void*);
1648 int pthread_attr_setstacksize(pthread_attr_t
*, size_t
);
1650 else version (CRuntime_Bionic
)
1652 int pthread_attr_getstack(const scope pthread_attr_t
*, void**, size_t
*);
1653 int pthread_attr_getstackaddr(const scope pthread_attr_t
*, void**);
1654 int pthread_attr_getstacksize(const scope pthread_attr_t
*, size_t
*);
1655 int pthread_attr_setstack(pthread_attr_t
*, void*, size_t
);
1656 int pthread_attr_setstackaddr(pthread_attr_t
*, void*);
1657 int pthread_attr_setstacksize(pthread_attr_t
*, size_t
);
1659 else version (CRuntime_Musl
)
1661 int pthread_attr_getstack(const scope pthread_attr_t
*, void**, size_t
*);
1662 int pthread_attr_setstacksize(pthread_attr_t
*, size_t
);
1664 else version (CRuntime_UClibc
)
1666 int pthread_attr_getstack(const scope pthread_attr_t
*, void**, size_t
*);
1667 int pthread_attr_getstackaddr(const scope pthread_attr_t
*, void**);
1668 int pthread_attr_getstacksize(const scope pthread_attr_t
*, size_t
*);
1669 int pthread_attr_setstack(pthread_attr_t
*, void*, size_t
);
1670 int pthread_attr_setstackaddr(pthread_attr_t
*, void*);
1671 int pthread_attr_setstacksize(pthread_attr_t
*, size_t
);
1675 static assert(false, "Unsupported platform");
1679 // Shared Synchronization (TSH)
1682 int pthread_condattr_getpshared(const scope pthread_condattr_t*, int*);
1683 int pthread_condattr_setpshared(pthread_condattr_t*, int);
1684 int pthread_mutexattr_getpshared(const scope pthread_mutexattr_t*, int*);
1685 int pthread_mutexattr_setpshared(pthread_mutexattr_t*, int);
1686 int pthread_rwlockattr_getpshared(const scope pthread_rwlockattr_t*, int*);
1687 int pthread_rwlockattr_setpshared(pthread_rwlockattr_t*, int);
1690 version (CRuntime_Glibc
)
1692 int pthread_condattr_getpshared(const scope pthread_condattr_t
*, int*);
1693 int pthread_condattr_setpshared(pthread_condattr_t
*, int);
1694 int pthread_mutexattr_getpshared(const scope pthread_mutexattr_t
*, int*);
1695 int pthread_mutexattr_setpshared(pthread_mutexattr_t
*, int);
1696 int pthread_rwlockattr_getpshared(const scope pthread_rwlockattr_t
*, int*);
1697 int pthread_rwlockattr_setpshared(pthread_rwlockattr_t
*, int);
1699 else version (FreeBSD
)
1701 int pthread_condattr_getpshared(const scope pthread_condattr_t
*, int*);
1702 int pthread_condattr_setpshared(pthread_condattr_t
*, int);
1703 int pthread_mutexattr_getpshared(const scope pthread_mutexattr_t
*, int*);
1704 int pthread_mutexattr_setpshared(pthread_mutexattr_t
*, int);
1705 int pthread_rwlockattr_getpshared(const scope pthread_rwlockattr_t
*, int*);
1706 int pthread_rwlockattr_setpshared(pthread_rwlockattr_t
*, int);
1708 else version (NetBSD
)
1710 int pthread_condattr_getpshared(const scope pthread_condattr_t
*, int*);
1711 int pthread_condattr_setpshared(pthread_condattr_t
*, int);
1712 int pthread_mutexattr_getpshared(const scope pthread_mutexattr_t
*, int*);
1713 int pthread_mutexattr_setpshared(pthread_mutexattr_t
*, int);
1714 int pthread_rwlockattr_getpshared(const scope pthread_rwlockattr_t
*, int*);
1715 int pthread_rwlockattr_setpshared(pthread_rwlockattr_t
*, int);
1717 else version (OpenBSD
)
1720 else version (DragonFlyBSD
)
1722 int pthread_condattr_getpshared(const scope pthread_condattr_t
*, int*);
1723 int pthread_condattr_setpshared(pthread_condattr_t
*, int);
1724 int pthread_mutexattr_getpshared(const scope pthread_mutexattr_t
*, int*);
1725 int pthread_mutexattr_setpshared(pthread_mutexattr_t
*, int);
1726 int pthread_rwlockattr_getpshared(const scope pthread_rwlockattr_t
*, int*);
1727 int pthread_rwlockattr_setpshared(pthread_rwlockattr_t
*, int);
1729 else version (Darwin
)
1731 int pthread_condattr_getpshared(const scope pthread_condattr_t
*, int*);
1732 int pthread_condattr_setpshared(pthread_condattr_t
*, int);
1733 int pthread_mutexattr_getpshared(const scope pthread_mutexattr_t
*, int*);
1734 int pthread_mutexattr_setpshared(pthread_mutexattr_t
*, int);
1735 int pthread_rwlockattr_getpshared(const scope pthread_rwlockattr_t
*, int*);
1736 int pthread_rwlockattr_setpshared(pthread_rwlockattr_t
*, int);
1738 else version (Solaris
)
1740 int pthread_condattr_getpshared(const scope pthread_condattr_t
*, int*);
1741 int pthread_condattr_setpshared(pthread_condattr_t
*, int);
1742 int pthread_mutexattr_getpshared(const scope pthread_mutexattr_t
*, int*);
1743 int pthread_mutexattr_setpshared(pthread_mutexattr_t
*, int);
1744 int pthread_rwlockattr_getpshared(const scope pthread_rwlockattr_t
*, int*);
1745 int pthread_rwlockattr_setpshared(pthread_rwlockattr_t
*, int);
1747 else version (CRuntime_Bionic
)
1749 int pthread_condattr_getpshared(pthread_condattr_t
*, int*);
1750 int pthread_condattr_setpshared(pthread_condattr_t
*, int);
1751 int pthread_mutexattr_getpshared(pthread_mutexattr_t
*, int*);
1752 int pthread_mutexattr_setpshared(pthread_mutexattr_t
*, int);
1753 int pthread_rwlockattr_getpshared(pthread_rwlockattr_t
*, int*);
1754 int pthread_rwlockattr_setpshared(pthread_rwlockattr_t
*, int);
1756 else version (CRuntime_Musl
)
1758 int pthread_condattr_getpshared(pthread_condattr_t
*, int*);
1759 int pthread_condattr_setpshared(pthread_condattr_t
*, int);
1760 int pthread_mutexattr_getpshared(pthread_mutexattr_t
*, int*);
1761 int pthread_mutexattr_setpshared(pthread_mutexattr_t
*, int);
1762 int pthread_rwlockattr_getpshared(pthread_rwlockattr_t
*, int*);
1763 int pthread_rwlockattr_setpshared(pthread_rwlockattr_t
*, int);
1765 else version (CRuntime_UClibc
)
1767 int pthread_condattr_getpshared(const scope pthread_condattr_t
*, int*);
1768 int pthread_condattr_setpshared(pthread_condattr_t
*, int);
1769 int pthread_mutexattr_getpshared(const scope pthread_mutexattr_t
*, int*);
1770 int pthread_mutexattr_setpshared(pthread_mutexattr_t
*, int);
1771 int pthread_rwlockattr_getpshared(const scope pthread_rwlockattr_t
*, int*);
1772 int pthread_rwlockattr_setpshared(pthread_rwlockattr_t
*, int);
1776 static assert(false, "Unsupported platform");