#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined XPG3 && !defined XPG4
constant PTHREAD_CANCEL_ASYNCHRONOUS
constant PTHREAD_CANCEL_ENABLE
constant PTHREAD_CANCEL_DEFERRED
constant PTHREAD_CANCEL_DISABLE
constant PTHREAD_CANCELED
macro PTHREAD_COND_INITIALIZER
constant PTHREAD_CREATE_DETACHED
constant PTHREAD_CREATE_JOINABLE
constant PTHREAD_EXPLICIT_SCHED
constant PTHREAD_INHERIT_SCHED
constant PTHREAD_ONCE_INIT
optional-constant PTHREAD_PRIO_INHERIT
optional-constant PTHREAD_PRIO_NONE
optional-constant PTHREAD_PRIO_PROTECT
constant PTHREAD_PROCESS_SHARED
constant PTHREAD_PROCESS_PRIVATE
constant PTHREAD_SCOPE_PROCESS
constant PTHREAD_SCOPE_SYSTEM
macro PTHREAD_MUTEX_INITIALIZER
# ifndef POSIX
constant PTHREAD_MUTEX_DEFAULT
constant PTHREAD_MUTEX_ERRORCHECK
constant PTHREAD_MUTEX_NORMAL
constant PTHREAD_MUTEX_RECURSIVE
macro PTHREAD_RWLOCK_INITIALIZER
# endif
# if defined XOPEN2K8 || defined POSIX2008
constant PTHREAD_MUTEX_ROBUST
constant PTHREAD_MUTEX_STALLED
# endif

# ifndef POSIX
type pthread_attr_t
#  ifndef UNIX98
type pthread_barrier_t
type pthread_barrierattr_t
#  endif
type pthread_cond_t
type pthread_condattr_t
type pthread_key_t
type pthread_mutex_t
type pthread_mutexattr_t
type pthread_once_t
type pthread_rwlock_t
type pthread_rwlockattr_t
#  ifndef UNIX98
type pthread_spinlock_t
#  endif
type pthread_t
# endif

function int pthread_atfork (void (*) (void), void (*) (void), void (*) (void))
function int pthread_attr_destroy (pthread_attr_t*)
function int pthread_attr_getdetachstate (const pthread_attr_t*, int*)
# ifndef POSIX
function int pthread_attr_getguardsize (const pthread_attr_t*, size_t*)
# endif
function int pthread_attr_getinheritsched (const pthread_attr_t*, int*)
function int pthread_attr_getschedparam (const pthread_attr_t*, struct sched_param*)
function int pthread_attr_getschedpolicy (const pthread_attr_t*, int*)
function int pthread_attr_getscope (const pthread_attr_t*, int*)
function int pthread_attr_getstackaddr (const pthread_attr_t*, void**)
function int pthread_attr_getstacksize (const pthread_attr_t*, size_t*)
function int pthread_attr_init (pthread_attr_t*)
function int pthread_attr_setdetachstate (pthread_attr_t*, int)
# ifndef POSIX
function int pthread_attr_setguardsize (pthread_attr_t*, size_t)
# endif
function int pthread_attr_setinheritsched (pthread_attr_t*, int)
function int pthread_attr_setschedparam (pthread_attr_t*, const struct sched_param*)
function int pthread_attr_setschedpolicy (pthread_attr_t*, int)
function int pthread_attr_setscope (pthread_attr_t*, int)
function int pthread_attr_setstackaddr (pthread_attr_t*, void*)
function int pthread_attr_setstacksize (pthread_attr_t*, size_t)
# if !defined POSIX && !defined UNIX98
function int pthread_barrier_destroy (pthread_barrier_t*)
function int pthread_barrier_init (pthread_barrier_t*, const pthread_barrierattr_t*, unsigned int)
function int pthread_barrier_wait (pthread_barrier_t*)
function int pthread_barrierattr_destroy (pthread_barrierattr_t*)
function int pthread_barrierattr_getpshared (const pthread_barrierattr_t*, int*)
function int pthread_barrierattr_init (pthread_barrierattr_t*)
function int pthread_barrierattr_setpshared (pthread_barrierattr_t*, int)
# endif
function int pthread_cancel (pthread_t)
// function int pthread_cleanup_push (void (*) (void*), void*)
macro pthread_cleanup_push
// function int pthread_cleanup_pop (int)
macro pthread_cleanup_pop
function int pthread_cond_broadcast (pthread_cond_t*)
function int pthread_cond_destroy (pthread_cond_t*)
function int pthread_cond_init (pthread_cond_t*, const pthread_condattr_t*)
function int pthread_cond_signal (pthread_cond_t*)
function int pthread_cond_timedwait (pthread_cond_t*, pthread_mutex_t*, const struct timespec*)
function int pthread_cond_wait (pthread_cond_t*, pthread_mutex_t*)
function int pthread_condattr_destroy (pthread_condattr_t*)
#if !defined POSIX && !defined UNIX98 && !defined XOPEN2K
optional-function int pthread_condattr_getclock (const pthread_condattr_t*, clockid_t*)
#endif
function int pthread_condattr_getpshared (const pthread_condattr_t*, int*)
function int pthread_condattr_init (pthread_condattr_t*)
#if !defined POSIX && !defined UNIX98 && !defined XOPEN2K
optional-function int pthread_condattr_setclock (pthread_condattr_t*, clockid_t)
#endif
function int pthread_condattr_setpshared (pthread_condattr_t*, int)
function int pthread_create (pthread_t*, const pthread_attr_t*, void *(*) (void*), void*)
function int pthread_detach (pthread_t)
function int pthread_equal (pthread_t, pthread_t)
function void pthread_exit (void*)
# if !defined POSIX && !defined POSIX2008
function int pthread_getconcurrency (void)
# endif
# if !defined POSIX && !defined UNIX98
function int pthread_getcpuclockid (pthread_t, clockid_t*)
# endif
function int pthread_getschedparam (pthread_t, int*, struct sched_param*)
function {void*} pthread_getspecific (pthread_key_t)
function int pthread_join (pthread_t, void**)
function int pthread_key_create (pthread_key_t*, void (*)(void*))
function int pthread_key_delete (pthread_key_t)
function int pthread_mutex_destroy (pthread_mutex_t*)
optional-function int pthread_mutex_getprioceiling (const pthread_mutex_t*, int*)
function int pthread_mutex_init (pthread_mutex_t*, const pthread_mutexattr_t*)
function int pthread_mutex_lock (pthread_mutex_t*)
optional-function int pthread_mutex_setprioceiling (pthread_mutex_t*, int, int*)
# if !defined POSIX && !defined UNIX98
function int pthread_mutex_timedlock (pthread_mutex_t*, const struct timespec*)
# endif
function int pthread_mutex_trylock (pthread_mutex_t*)
function int pthread_mutex_unlock (pthread_mutex_t*)
function int pthread_mutexattr_destroy (pthread_mutexattr_t*)
optional-function int pthread_mutexattr_getprioceiling (const pthread_mutexattr_t*, int*)
optional-function int pthread_mutexattr_getprotocol (const pthread_mutexattr_t*, int*)
function int pthread_mutexattr_getpshared (const pthread_mutexattr_t*, int*)
# if !defined POSIX
function int pthread_mutexattr_gettype (const pthread_mutexattr_t*, int*)
# endif
function int pthread_mutexattr_init (pthread_mutexattr_t*)
optional-function int pthread_mutexattr_setprioceiling (pthread_mutexattr_t*, int)
optional-function int pthread_mutexattr_setprotocol (pthread_mutexattr_t*, int)
function int pthread_mutexattr_setpshared (pthread_mutexattr_t*, int)
# if !defined POSIX
function int pthread_mutexattr_settype (pthread_mutexattr_t*, int)
# endif
function int pthread_once (pthread_once_t*, void (*) (void))
# if !defined POSIX
function int pthread_rwlock_init (pthread_rwlock_t*, const pthread_rwlockattr_t*)
function int pthread_rwlock_rdlock (pthread_rwlock_t*)
# endif
# if !defined POSIX && !defined UNIX98
function int pthread_rwlock_timedrdlock (pthread_rwlock_t*, const struct timespec*)
function int pthread_rwlock_timedwrlock (pthread_rwlock_t*, const struct timespec*)
# endif
# if !defined POSIX
function int pthread_rwlock_tryrdlock (pthread_rwlock_t*)
function int pthread_rwlock_trywrlock (pthread_rwlock_t*)
function int pthread_rwlock_unlock (pthread_rwlock_t*)
function int pthread_rwlock_wrlock (pthread_rwlock_t*)
function int pthread_rwlockattr_destroy (pthread_rwlockattr_t*)
function int pthread_rwlockattr_getpshared (const pthread_rwlockattr_t*, int*)
function int pthread_rwlockattr_init (pthread_rwlockattr_t*)
function int pthread_rwlockattr_setpshared (pthread_rwlockattr_t*, int)
# endif
function pthread_t pthread_self (void)
function int pthread_setcancelstate (int, int*)
function int pthread_setcanceltype (int, int*)
# if !defined POSIX && !defined POSIX2008
function int pthread_setconcurrency (int)
# endif
function int pthread_setschedparam (pthread_t, int, const struct sched_param*)
function int pthread_setspecific (pthread_key_t, const void*)
# if !defined POSIX && !defined UNIX98 && !defined XOPEN2K && !defined XOPEN2K8 && !defined POSIX2008
function int pthread_sigmask (int, const sigset_t*, sigset_t*)
# endif
# if !defined POSIX && !defined UNIX98
function int pthread_spin_destroy (pthread_spinlock_t*)
function int pthread_spin_init (pthread_spinlock_t*, int)
function int pthread_spin_lock (pthread_spinlock_t*)
function int pthread_spin_trylock (pthread_spinlock_t*)
function int pthread_spin_unlock (pthread_spinlock_t*)
# endif
function void pthread_testcancel (void)
# if defined XOPEN2K8 || defined POSIX2008
function int pthread_mutex_consistent (pthread_mutex_t *)
function int pthread_mutexattr_getrobust (const pthread_mutexattr_t*, int*)
function int pthread_mutexattr_setrobust (pthread_mutexattr_t*, int)
# endif

allow-header sched.h
allow-header time.h

allow PTHREAD_*
allow pthread_*
allow *_t
#endif
