| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431 |
- /* pthread.h
- *
- * Written by Joel Sherrill <joel@OARcorp.com>.
- *
- * COPYRIGHT (c) 1989-2013.
- * On-Line Applications Research Corporation (OAR).
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software.
- *
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY. IN PARTICULAR, THE AUTHOR MAKES NO REPRESENTATION
- * OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY OF THIS
- * SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- *
- * $Id$
- */
- #ifndef __PTHREAD_h
- #define __PTHREAD_h
- #ifdef __cplusplus
- extern "C" {
- #endif
- #include <unistd.h>
- #if defined(_POSIX_THREADS)
- #include <sys/types.h>
- #include <time.h>
- #include <sys/sched.h>
- #include <sys/cdefs.h>
- struct _pthread_cleanup_context {
- void (*_routine)(void *);
- void *_arg;
- int _canceltype;
- struct _pthread_cleanup_context *_previous;
- };
- /* Register Fork Handlers */
- int _EXFUN(pthread_atfork,(void (*prepare)(void), void (*parent)(void),
- void (*child)(void)));
-
- /* Mutex Initialization Attributes, P1003.1c/Draft 10, p. 81 */
- int _EXFUN(pthread_mutexattr_init, (pthread_mutexattr_t *__attr));
- int _EXFUN(pthread_mutexattr_destroy, (pthread_mutexattr_t *__attr));
- int _EXFUN(pthread_mutexattr_getpshared,
- (_CONST pthread_mutexattr_t *__attr, int *__pshared));
- int _EXFUN(pthread_mutexattr_setpshared,
- (pthread_mutexattr_t *__attr, int __pshared));
- #if defined(_UNIX98_THREAD_MUTEX_ATTRIBUTES)
- /* Single UNIX Specification 2 Mutex Attributes types */
- int _EXFUN(pthread_mutexattr_gettype,
- (_CONST pthread_mutexattr_t *__attr, int *__kind));
- int _EXFUN(pthread_mutexattr_settype,
- (pthread_mutexattr_t *__attr, int __kind));
- #endif
- /* Initializing and Destroying a Mutex, P1003.1c/Draft 10, p. 87 */
- int _EXFUN(pthread_mutex_init,
- (pthread_mutex_t *__mutex, _CONST pthread_mutexattr_t *__attr));
- int _EXFUN(pthread_mutex_destroy, (pthread_mutex_t *__mutex));
- /* This is used to statically initialize a pthread_mutex_t. Example:
-
- pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
- */
- #define PTHREAD_MUTEX_INITIALIZER ((pthread_mutex_t) 0xFFFFFFFF)
- /* Locking and Unlocking a Mutex, P1003.1c/Draft 10, p. 93
- NOTE: P1003.4b/D8 adds pthread_mutex_timedlock(), p. 29 */
- int _EXFUN(pthread_mutex_lock, (pthread_mutex_t *__mutex));
- int _EXFUN(pthread_mutex_trylock, (pthread_mutex_t *__mutex));
- int _EXFUN(pthread_mutex_unlock, (pthread_mutex_t *__mutex));
- #if defined(_POSIX_TIMEOUTS)
- int _EXFUN(pthread_mutex_timedlock,
- (pthread_mutex_t *__mutex, _CONST struct timespec *__timeout));
- #endif /* _POSIX_TIMEOUTS */
- /* Condition Variable Initialization Attributes, P1003.1c/Draft 10, p. 96 */
-
- int _EXFUN(pthread_condattr_init, (pthread_condattr_t *__attr));
- int _EXFUN(pthread_condattr_destroy, (pthread_condattr_t *__attr));
- int _EXFUN(pthread_condattr_getpshared,
- (_CONST pthread_condattr_t *__attr, int *__pshared));
- int _EXFUN(pthread_condattr_setpshared,
- (pthread_condattr_t *__attr, int __pshared));
-
- /* Initializing and Destroying a Condition Variable, P1003.1c/Draft 10, p. 87 */
-
- int _EXFUN(pthread_cond_init,
- (pthread_cond_t *__cond, _CONST pthread_condattr_t *__attr));
- int _EXFUN(pthread_cond_destroy, (pthread_cond_t *__mutex));
-
- /* This is used to statically initialize a pthread_cond_t. Example:
-
- pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
- */
-
- #define PTHREAD_COND_INITIALIZER ((pthread_cond_t) 0xFFFFFFFF)
-
- /* Broadcasting and Signaling a Condition, P1003.1c/Draft 10, p. 101 */
-
- int _EXFUN(pthread_cond_signal, (pthread_cond_t *__cond));
- int _EXFUN(pthread_cond_broadcast, (pthread_cond_t *__cond));
-
- /* Waiting on a Condition, P1003.1c/Draft 10, p. 105 */
-
- int _EXFUN(pthread_cond_wait,
- (pthread_cond_t *__cond, pthread_mutex_t *__mutex));
-
- int _EXFUN(pthread_cond_timedwait,
- (pthread_cond_t *__cond, pthread_mutex_t *__mutex,
- _CONST struct timespec *__abstime));
-
- #if defined(_POSIX_THREAD_PRIORITY_SCHEDULING)
- /* Thread Creation Scheduling Attributes, P1003.1c/Draft 10, p. 120 */
- int _EXFUN(pthread_attr_setscope,
- (pthread_attr_t *__attr, int __contentionscope));
- int _EXFUN(pthread_attr_getscope,
- (_CONST pthread_attr_t *__attr, int *__contentionscope));
- int _EXFUN(pthread_attr_setinheritsched,
- (pthread_attr_t *__attr, int __inheritsched));
- int _EXFUN(pthread_attr_getinheritsched,
- (_CONST pthread_attr_t *__attr, int *__inheritsched));
- int _EXFUN(pthread_attr_setschedpolicy,
- (pthread_attr_t *__attr, int __policy));
- int _EXFUN(pthread_attr_getschedpolicy,
- (_CONST pthread_attr_t *__attr, int *__policy));
- #endif /* defined(_POSIX_THREAD_PRIORITY_SCHEDULING) */
- int _EXFUN(pthread_attr_setschedparam,
- (pthread_attr_t *__attr, _CONST struct sched_param *__param));
- int _EXFUN(pthread_attr_getschedparam,
- (_CONST pthread_attr_t *__attr, struct sched_param *__param));
- #if defined(_POSIX_THREAD_PRIORITY_SCHEDULING)
- /* Dynamic Thread Scheduling Parameters Access, P1003.1c/Draft 10, p. 124 */
- int _EXFUN(pthread_getschedparam,
- (pthread_t __pthread, int *__policy, struct sched_param *__param));
- int _EXFUN(pthread_setschedparam,
- (pthread_t __pthread, int __policy, struct sched_param *__param));
- #endif /* defined(_POSIX_THREAD_PRIORITY_SCHEDULING) */
- #if defined(_POSIX_THREAD_PRIO_INHERIT) || defined(_POSIX_THREAD_PRIO_PROTECT)
- /* Mutex Initialization Scheduling Attributes, P1003.1c/Draft 10, p. 128 */
-
- int _EXFUN(pthread_mutexattr_setprotocol,
- (pthread_mutexattr_t *__attr, int __protocol));
- int _EXFUN(pthread_mutexattr_getprotocol,
- (_CONST pthread_mutexattr_t *__attr, int *__protocol));
- int _EXFUN(pthread_mutexattr_setprioceiling,
- (pthread_mutexattr_t *__attr, int __prioceiling));
- int _EXFUN(pthread_mutexattr_getprioceiling,
- (_CONST pthread_mutexattr_t *__attr, int *__prioceiling));
- #endif /* _POSIX_THREAD_PRIO_INHERIT || _POSIX_THREAD_PRIO_PROTECT */
- #if defined(_POSIX_THREAD_PRIO_PROTECT)
- /* Change the Priority Ceiling of a Mutex, P1003.1c/Draft 10, p. 131 */
- int _EXFUN(pthread_mutex_setprioceiling,
- (pthread_mutex_t *__mutex, int __prioceiling, int *__old_ceiling));
- int _EXFUN(pthread_mutex_getprioceiling,
- (pthread_mutex_t *__mutex, int *__prioceiling));
- #endif /* _POSIX_THREAD_PRIO_PROTECT */
- /* Thread Creation Attributes, P1003.1c/Draft 10, p, 140 */
- int _EXFUN(pthread_attr_init, (pthread_attr_t *__attr));
- int _EXFUN(pthread_attr_destroy, (pthread_attr_t *__attr));
- int _EXFUN(pthread_attr_setstack, (pthread_attr_t *attr,
- void *__stackaddr, size_t __stacksize));
- int _EXFUN(pthread_attr_getstack, (_CONST pthread_attr_t *attr,
- void **__stackaddr, size_t *__stacksize));
- int _EXFUN(pthread_attr_getstacksize,
- (_CONST pthread_attr_t *__attr, size_t *__stacksize));
- int _EXFUN(pthread_attr_setstacksize,
- (pthread_attr_t *__attr, size_t __stacksize));
- int _EXFUN(pthread_attr_getstackaddr,
- (_CONST pthread_attr_t *__attr, void **__stackaddr));
- int _EXFUN(pthread_attr_setstackaddr,
- (pthread_attr_t *__attr, void *__stackaddr));
- int _EXFUN(pthread_attr_getdetachstate,
- (_CONST pthread_attr_t *__attr, int *__detachstate));
- int _EXFUN(pthread_attr_setdetachstate,
- (pthread_attr_t *__attr, int __detachstate));
- int _EXFUN(pthread_attr_getguardsize,
- (_CONST pthread_attr_t *__attr, size_t *__guardsize));
- int _EXFUN(pthread_attr_setguardsize,
- (pthread_attr_t *__attr, size_t __guardsize));
- /* POSIX thread APIs beyond the POSIX standard but provided
- * in GNU/Linux. They may be provided by other OSes for
- * compatibility.
- */
- #if defined(__GNU_VISIBLE)
- #if defined(__rtems__)
- int _EXFUN(pthread_attr_setaffinity_np,
- (pthread_attr_t *__attr, size_t __cpusetsize,
- const cpu_set_t *__cpuset));
- int _EXFUN(pthread_attr_getaffinity_np,
- (const pthread_attr_t *__attr, size_t __cpusetsize,
- cpu_set_t *__cpuset));
- int _EXFUN(pthread_setaffinity_np,
- (pthread_t __id, size_t __cpusetsize, const cpu_set_t *__cpuset));
- int _EXFUN(pthread_getaffinity_np,
- (const pthread_t __id, size_t __cpusetsize, cpu_set_t *__cpuset));
- int _EXFUN(pthread_getattr_np,
- (pthread_t __id, pthread_attr_t *__attr));
- #endif /* defined(__rtems__) */
- #endif /* defined(__GNU_VISIBLE) */
- /* Thread Creation, P1003.1c/Draft 10, p. 144 */
- int _EXFUN(pthread_create,
- (pthread_t *__pthread, _CONST pthread_attr_t *__attr,
- void *(*__start_routine)( void * ), void *__arg));
- /* Wait for Thread Termination, P1003.1c/Draft 10, p. 147 */
- int _EXFUN(pthread_join, (pthread_t __pthread, void **__value_ptr));
- /* Detaching a Thread, P1003.1c/Draft 10, p. 149 */
- int _EXFUN(pthread_detach, (pthread_t __pthread));
- /* Thread Termination, p1003.1c/Draft 10, p. 150 */
- void _EXFUN(pthread_exit, (void *__value_ptr));
- /* Get Calling Thread's ID, p1003.1c/Draft 10, p. XXX */
- pthread_t _EXFUN(pthread_self, (void));
- /* Compare Thread IDs, p1003.1c/Draft 10, p. 153 */
- int _EXFUN(pthread_equal, (pthread_t __t1, pthread_t __t2));
- /* Dynamic Package Initialization */
- /* This is used to statically initialize a pthread_once_t. Example:
-
- pthread_once_t once = PTHREAD_ONCE_INIT;
-
- NOTE: This is named inconsistently -- it should be INITIALIZER. */
-
- #define PTHREAD_ONCE_INIT { 1, 0 } /* is initialized and not run */
-
- int _EXFUN(pthread_once,
- (pthread_once_t *__once_control, void (*__init_routine)(void)));
- /* Thread-Specific Data Key Create, P1003.1c/Draft 10, p. 163 */
- int _EXFUN(pthread_key_create,
- (pthread_key_t *__key, void (*__destructor)( void * )));
- /* Thread-Specific Data Management, P1003.1c/Draft 10, p. 165 */
- int _EXFUN(pthread_setspecific,
- (pthread_key_t __key, _CONST void *__value));
- void * _EXFUN(pthread_getspecific, (pthread_key_t __key));
- /* Thread-Specific Data Key Deletion, P1003.1c/Draft 10, p. 167 */
- int _EXFUN(pthread_key_delete, (pthread_key_t __key));
- /* Execution of a Thread, P1003.1c/Draft 10, p. 181 */
- #define PTHREAD_CANCEL_ENABLE 0
- #define PTHREAD_CANCEL_DISABLE 1
- #define PTHREAD_CANCEL_DEFERRED 0
- #define PTHREAD_CANCEL_ASYNCHRONOUS 1
- #define PTHREAD_CANCELED ((void *) -1)
- int _EXFUN(pthread_cancel, (pthread_t __pthread));
- /* Setting Cancelability State, P1003.1c/Draft 10, p. 183 */
- int _EXFUN(pthread_setcancelstate, (int __state, int *__oldstate));
- int _EXFUN(pthread_setcanceltype, (int __type, int *__oldtype));
- void _EXFUN(pthread_testcancel, (void));
- /* Establishing Cancellation Handlers, P1003.1c/Draft 10, p. 184 */
- void _EXFUN(_pthread_cleanup_push,
- (struct _pthread_cleanup_context *_context,
- void (*_routine)(void *), void *_arg));
- void _EXFUN(_pthread_cleanup_pop,
- (struct _pthread_cleanup_context *_context,
- int _execute));
- /* It is intentional to open and close the scope in two different macros */
- #define pthread_cleanup_push(_routine, _arg) \
- do { \
- struct _pthread_cleanup_context _pthread_clup_ctx; \
- _pthread_cleanup_push(&_pthread_clup_ctx, (_routine), (_arg))
- #define pthread_cleanup_pop(_execute) \
- _pthread_cleanup_pop(&_pthread_clup_ctx, (_execute)); \
- } while (0)
- #if defined(_GNU_SOURCE)
- void _EXFUN(_pthread_cleanup_push_defer,
- (struct _pthread_cleanup_context *_context,
- void (*_routine)(void *), void *_arg));
- void _EXFUN(_pthread_cleanup_pop_restore,
- (struct _pthread_cleanup_context *_context,
- int _execute));
- /* It is intentional to open and close the scope in two different macros */
- #define pthread_cleanup_push_defer_np(_routine, _arg) \
- do { \
- struct _pthread_cleanup_context _pthread_clup_ctx; \
- _pthread_cleanup_push_defer(&_pthread_clup_ctx, (_routine), (_arg))
- #define pthread_cleanup_pop_restore_np(_execute) \
- _pthread_cleanup_pop_restore(&_pthread_clup_ctx, (_execute)); \
- } while (0)
- #endif /* defined(_GNU_SOURCE) */
- #if defined(_POSIX_THREAD_CPUTIME)
-
- /* Accessing a Thread CPU-time Clock, P1003.4b/D8, p. 58 */
-
- int _EXFUN(pthread_getcpuclockid,
- (pthread_t __pthread_id, clockid_t *__clock_id));
-
- #endif /* defined(_POSIX_THREAD_CPUTIME) */
- #endif /* defined(_POSIX_THREADS) */
- #if defined(_POSIX_BARRIERS)
- int _EXFUN(pthread_barrierattr_init, (pthread_barrierattr_t *__attr));
- int _EXFUN(pthread_barrierattr_destroy, (pthread_barrierattr_t *__attr));
- int _EXFUN(pthread_barrierattr_getpshared,
- (_CONST pthread_barrierattr_t *__attr, int *__pshared));
- int _EXFUN(pthread_barrierattr_setpshared,
- (pthread_barrierattr_t *__attr, int __pshared));
- #define PTHREAD_BARRIER_SERIAL_THREAD -1
- int _EXFUN(pthread_barrier_init,
- (pthread_barrier_t *__barrier,
- _CONST pthread_barrierattr_t *__attr, unsigned __count));
- int _EXFUN(pthread_barrier_destroy, (pthread_barrier_t *__barrier));
- int _EXFUN(pthread_barrier_wait,(pthread_barrier_t *__barrier));
- #endif /* defined(_POSIX_BARRIERS) */
- #if defined(_POSIX_SPIN_LOCKS)
- int _EXFUN(pthread_spin_init,
- (pthread_spinlock_t *__spinlock, int __pshared));
- int _EXFUN(pthread_spin_destroy, (pthread_spinlock_t *__spinlock));
- int _EXFUN(pthread_spin_lock, (pthread_spinlock_t *__spinlock));
- int _EXFUN(pthread_spin_trylock, (pthread_spinlock_t *__spinlock));
- int _EXFUN(pthread_spin_unlock, (pthread_spinlock_t *__spinlock));
- #endif /* defined(_POSIX_SPIN_LOCKS) */
- #if defined(_POSIX_READER_WRITER_LOCKS)
- /* This is used to statically initialize a pthread_rwlock_t. Example:
-
- pthread_mutex_t mutex = PTHREAD_RWLOCK_INITIALIZER;
- */
- #define PTHREAD_RWLOCK_INITIALIZER ((pthread_rwlock_t) 0xFFFFFFFF)
- int _EXFUN(pthread_rwlockattr_init, (pthread_rwlockattr_t *__attr));
- int _EXFUN(pthread_rwlockattr_destroy, (pthread_rwlockattr_t *__attr));
- int _EXFUN(pthread_rwlockattr_getpshared,
- (_CONST pthread_rwlockattr_t *__attr, int *__pshared));
- int _EXFUN(pthread_rwlockattr_setpshared,
- (pthread_rwlockattr_t *__attr, int __pshared));
- int _EXFUN(pthread_rwlock_init,
- (pthread_rwlock_t *__rwlock, _CONST pthread_rwlockattr_t *__attr));
- int _EXFUN(pthread_rwlock_destroy, (pthread_rwlock_t *__rwlock));
- int _EXFUN(pthread_rwlock_rdlock,(pthread_rwlock_t *__rwlock));
- int _EXFUN(pthread_rwlock_tryrdlock,(pthread_rwlock_t *__rwlock));
- int _EXFUN(pthread_rwlock_timedrdlock,
- (pthread_rwlock_t *__rwlock, _CONST struct timespec *__abstime));
- int _EXFUN(pthread_rwlock_unlock,(pthread_rwlock_t *__rwlock));
- int _EXFUN(pthread_rwlock_wrlock,(pthread_rwlock_t *__rwlock));
- int _EXFUN(pthread_rwlock_trywrlock,(pthread_rwlock_t *__rwlock));
- int _EXFUN(pthread_rwlock_timedwrlock,
- (pthread_rwlock_t *__rwlock, _CONST struct timespec *__abstime));
- #endif /* defined(_POSIX_READER_WRITER_LOCKS) */
- #ifdef __cplusplus
- }
- #endif
- #endif
- /* end of include file */
|