[BACK]Return to pthread.h CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / lib / libpthread

Annotation of src/lib/libpthread/pthread.h, Revision 1.40

1.40    ! christos    1: /*     $NetBSD: pthread.h,v 1.39 2017/12/26 17:00:50 christos Exp $    */
1.2       thorpej     2:
                      3: /*-
                      4:  * Copyright (c) 2001 The NetBSD Foundation, Inc.
                      5:  * All rights reserved.
                      6:  *
                      7:  * This code is derived from software contributed to The NetBSD Foundation
                      8:  * by Nathan J. Williams.
                      9:  *
                     10:  * Redistribution and use in source and binary forms, with or without
                     11:  * modification, are permitted provided that the following conditions
                     12:  * are met:
                     13:  * 1. Redistributions of source code must retain the above copyright
                     14:  *    notice, this list of conditions and the following disclaimer.
                     15:  * 2. Redistributions in binary form must reproduce the above copyright
                     16:  *    notice, this list of conditions and the following disclaimer in the
                     17:  *    documentation and/or other materials provided with the distribution.
                     18:  *
                     19:  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
                     20:  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
                     21:  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
                     22:  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
                     23:  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
                     24:  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
                     25:  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
                     26:  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
                     27:  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
                     28:  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
                     29:  * POSSIBILITY OF SUCH DAMAGE.
                     30:  */
                     31:
                     32: #ifndef _LIB_PTHREAD_H
                     33: #define _LIB_PTHREAD_H
                     34:
                     35: #include <sys/cdefs.h>
                     36:
                     37: #include <time.h>      /* For timespec */
                     38: #include <sched.h>
1.27      christos   39: #include <sys/featuretest.h>
1.2       thorpej    40:
1.13      lukem      41: #include <pthread_types.h>
1.2       thorpej    42:
                     43: __BEGIN_DECLS
1.40    ! christos   44: #ifndef __PTHREAD_ATFORK_DECLARED
        !            45: #define __PTHREAD_ATFORK_DECLARED
1.8       nathanw    46: int    pthread_atfork(void (*)(void), void (*)(void), void (*)(void));
1.40    ! christos   47: #endif
1.21      kleink     48: int    pthread_create(pthread_t * __restrict,
                     49:            const pthread_attr_t * __restrict, void *(*)(void *),
                     50:            void * __restrict);
1.4       christos   51: void   pthread_exit(void *) __attribute__((__noreturn__));
                     52: int    pthread_join(pthread_t, void **);
                     53: int    pthread_equal(pthread_t, pthread_t);
1.2       thorpej    54: pthread_t      pthread_self(void);
1.4       christos   55: int    pthread_detach(pthread_t);
1.2       thorpej    56:
                     57: int    pthread_getrrtimer_np(void);
                     58: int    pthread_setrrtimer_np(int);
                     59:
1.4       christos   60: int    pthread_attr_init(pthread_attr_t *);
                     61: int    pthread_attr_destroy(pthread_attr_t *);
1.14      nathanw    62: int    pthread_attr_get_np(pthread_t, pthread_attr_t *);
1.21      kleink     63: int    pthread_attr_getguardsize(const pthread_attr_t * __restrict,
                     64:            size_t * __restrict);
1.14      nathanw    65: int    pthread_attr_setguardsize(pthread_attr_t *, size_t);
1.21      kleink     66: int    pthread_attr_getinheritsched(const pthread_attr_t * __restrict,
                     67:            int * __restrict);
1.14      nathanw    68: int    pthread_attr_setinheritsched(pthread_attr_t *, int);
1.21      kleink     69: int    pthread_attr_getschedparam(const pthread_attr_t * __restrict,
                     70:            struct sched_param * __restrict);
                     71: int    pthread_attr_setschedparam(pthread_attr_t * __restrict,
                     72:     const struct sched_param * __restrict);
                     73: int    pthread_attr_getschedpolicy(const pthread_attr_t * __restrict,
                     74:            int * __restrict);
1.20      nathanw    75: int    pthread_attr_setschedpolicy(pthread_attr_t *, int);
1.21      kleink     76: int    pthread_attr_getscope(const pthread_attr_t * __restrict,
                     77:            int * __restrict);
1.14      nathanw    78: int    pthread_attr_setscope(pthread_attr_t *, int);
1.21      kleink     79: int    pthread_attr_getstack(const pthread_attr_t * __restrict,
                     80:            void ** __restrict, size_t * __restrict);
1.14      nathanw    81: int    pthread_attr_setstack(pthread_attr_t *, void *, size_t);
1.21      kleink     82: int    pthread_attr_getstacksize(const pthread_attr_t * __restrict,
                     83:            size_t * __restrict);
1.14      nathanw    84: int    pthread_attr_setstacksize(pthread_attr_t *, size_t);
1.21      kleink     85: int    pthread_attr_getstackaddr(const pthread_attr_t * __restrict,
                     86:            void ** __restrict);
1.14      nathanw    87: int    pthread_attr_setstackaddr(pthread_attr_t *, void *);
1.4       christos   88: int    pthread_attr_getdetachstate(const pthread_attr_t *, int *);
                     89: int    pthread_attr_setdetachstate(pthread_attr_t *, int);
1.9       thorpej    90: int    pthread_attr_getname_np(const pthread_attr_t *, char *,
                     91:            size_t, void **);
                     92: int    pthread_attr_setname_np(pthread_attr_t *, const char *, void *);
1.4       christos   93:
1.21      kleink     94: int    pthread_mutex_init(pthread_mutex_t * __restrict,
                     95:            const pthread_mutexattr_t * __restrict);
1.4       christos   96: int    pthread_mutex_destroy(pthread_mutex_t *);
                     97: int    pthread_mutex_lock(pthread_mutex_t *);
                     98: int    pthread_mutex_trylock(pthread_mutex_t *);
                     99: int    pthread_mutex_unlock(pthread_mutex_t *);
1.39      christos  100: #ifndef __LIBC12_SOURCE__
1.38      kamil     101: int    pthread_mutex_timedlock(pthread_mutex_t * __restrict,
1.37      christos  102:            const struct timespec * __restrict);
1.39      christos  103: #endif
1.37      christos  104: int    pthread_mutex_getprioceiling(const pthread_mutex_t * __restrict,
                    105:            int * __restrict);
                    106: int    pthread_mutex_setprioceiling(pthread_mutex_t * __restrict, int,
                    107:            int * __restrict);
1.4       christos  108: int    pthread_mutexattr_init(pthread_mutexattr_t *);
                    109: int    pthread_mutexattr_destroy(pthread_mutexattr_t *);
1.37      christos  110: #ifdef _PTHREAD_PSHARED
                    111: int    pthread_mutexattr_getpshared(const pthread_mutexattr_t * __restrict,
                    112:            int * __restrict);
                    113: int    pthread_mutexattr_setpshared(pthread_mutexattr_t *, int);
                    114: #endif
1.21      kleink    115: int    pthread_mutexattr_gettype(const pthread_mutexattr_t * __restrict,
                    116:            int * __restrict);
1.5       wiz       117: int    pthread_mutexattr_settype(pthread_mutexattr_t *attr, int);
1.37      christos  118: int    pthread_mutexattr_getprotocol(const pthread_mutexattr_t * __restrict,
                    119:            int * __restrict);
                    120: int    pthread_mutexattr_setprotocol(pthread_mutexattr_t*,
                    121:            int);
                    122: int    pthread_mutexattr_getprioceiling(const pthread_mutexattr_t * __restrict,
                    123:            int * __restrict);
                    124: int    pthread_mutexattr_setprioceiling(pthread_mutexattr_t *,
                    125:            int);
1.21      kleink    126: int    pthread_cond_init(pthread_cond_t * __restrict,
                    127:            const pthread_condattr_t * __restrict);
1.4       christos  128: int    pthread_cond_destroy(pthread_cond_t *);
1.21      kleink    129: int    pthread_cond_wait(pthread_cond_t * __restrict,
                    130:            pthread_mutex_t * __restrict);
1.33      christos  131: #ifndef __LIBC12_SOURCE__
1.21      kleink    132: int    pthread_cond_timedwait(pthread_cond_t * __restrict,
                    133:            pthread_mutex_t * __restrict, const struct timespec * __restrict);
1.33      christos  134: #endif
1.4       christos  135: int    pthread_cond_signal(pthread_cond_t *);
                    136: int    pthread_cond_broadcast(pthread_cond_t *);
                    137: int    pthread_condattr_init(pthread_condattr_t *);
1.35      christos  138: #if defined(_NETBSD_SOURCE)
                    139: int     pthread_condattr_setclock(pthread_condattr_t *, clockid_t);
1.37      christos  140: int    pthread_condattr_getclock(const pthread_condattr_t * __restrict,
                    141:            clockid_t * __restrict);
1.35      christos  142: #endif
1.4       christos  143: int    pthread_condattr_destroy(pthread_condattr_t *);
1.37      christos  144: #ifdef _PTHREAD_PSHARED
                    145: int    pthread_condattr_getpshared(const pthread_condattr_t * __restrict,
                    146:            int * __restrict);
                    147: int    pthread_condattr_setpshared(pthread_condattr_t *, int);
                    148: #endif
1.4       christos  149: int    pthread_once(pthread_once_t *, void (*)(void));
                    150:
                    151: int    pthread_key_create(pthread_key_t *, void (*)(void *));
                    152: int    pthread_key_delete(pthread_key_t);
                    153: int    pthread_setspecific(pthread_key_t, const void *);
                    154: void*  pthread_getspecific(pthread_key_t);
                    155:
                    156: int    pthread_cancel(pthread_t);
                    157: int    pthread_setcancelstate(int, int *);
                    158: int    pthread_setcanceltype(int, int *);
1.2       thorpej   159: void   pthread_testcancel(void);
                    160:
1.9       thorpej   161: int    pthread_getname_np(pthread_t, char *, size_t);
                    162: int    pthread_setname_np(pthread_t, const char *, void *);
1.15      christos  163:
                    164: int    pthread_attr_setcreatesuspend_np(pthread_attr_t *);
                    165: int    pthread_suspend_np(pthread_t);
                    166: int    pthread_resume_np(pthread_t);
1.9       thorpej   167:
1.23      ad        168: unsigned int   pthread_curcpu_np(void);
                    169:
1.36      christos  170: int    pthread_getcpuclockid(pthread_t, clockid_t *);
                    171:
1.2       thorpej   172: struct pthread_cleanup_store {
                    173:        void    *pad[4];
                    174: };
                    175:
1.4       christos  176: #define pthread_cleanup_push(routine, arg)                     \
1.2       thorpej   177:         {                                                      \
1.4       christos  178:                struct pthread_cleanup_store __store;           \
1.2       thorpej   179:                pthread__cleanup_push((routine),(arg), &__store);
                    180:
                    181: #define pthread_cleanup_pop(execute)                           \
                    182:                pthread__cleanup_pop((execute), &__store);      \
                    183:        }
                    184:
1.4       christos  185: void   pthread__cleanup_push(void (*)(void *), void *, void *);
                    186: void   pthread__cleanup_pop(int, void *);
1.2       thorpej   187:
1.4       christos  188: int    pthread_spin_init(pthread_spinlock_t *, int);
                    189: int    pthread_spin_destroy(pthread_spinlock_t *);
                    190: int    pthread_spin_lock(pthread_spinlock_t *);
                    191: int    pthread_spin_trylock(pthread_spinlock_t *);
                    192: int    pthread_spin_unlock(pthread_spinlock_t *);
                    193:
1.21      kleink    194: int    pthread_rwlock_init(pthread_rwlock_t * __restrict,
                    195:            const pthread_rwlockattr_t * __restrict);
1.4       christos  196: int    pthread_rwlock_destroy(pthread_rwlock_t *);
                    197: int    pthread_rwlock_rdlock(pthread_rwlock_t *);
                    198: int    pthread_rwlock_tryrdlock(pthread_rwlock_t *);
                    199: int    pthread_rwlock_wrlock(pthread_rwlock_t *);
                    200: int    pthread_rwlock_trywrlock(pthread_rwlock_t *);
1.33      christos  201: #ifndef __LIBC12_SOURCE__
1.21      kleink    202: int    pthread_rwlock_timedrdlock(pthread_rwlock_t * __restrict,
                    203:            const struct timespec * __restrict);
                    204: int    pthread_rwlock_timedwrlock(pthread_rwlock_t * __restrict,
                    205:            const struct timespec * __restrict);
1.33      christos  206: #endif
1.4       christos  207: int    pthread_rwlock_unlock(pthread_rwlock_t *);
                    208: int    pthread_rwlockattr_init(pthread_rwlockattr_t *);
                    209: int    pthread_rwlockattr_destroy(pthread_rwlockattr_t *);
1.37      christos  210: #ifdef _PTHREAD_PSHARED
                    211: int    pthread_rwlockattr_getpshared(const pthread_rwlockattr_t * __restrict,
                    212:            int * __restrict);
                    213: int    pthread_rwlockattr_setpshared(pthread_rwlockattr_t *, int);
                    214: #endif
1.21      kleink    215: int    pthread_barrier_init(pthread_barrier_t * __restrict,
                    216:            const pthread_barrierattr_t * __restrict, unsigned int);
1.4       christos  217: int    pthread_barrier_wait(pthread_barrier_t *);
                    218: int    pthread_barrier_destroy(pthread_barrier_t *);
                    219: int    pthread_barrierattr_init(pthread_barrierattr_t *);
                    220: int    pthread_barrierattr_destroy(pthread_barrierattr_t *);
1.37      christos  221: #ifdef _PTHREAD_PSHARED
                    222: int    pthread_barrierattr_getpshared(const pthread_barrierattr_t * __restrict,
                    223:     int * __restrict);
                    224: int    pthread_barrierattr_setpshared(pthread_barrierattr_t *, int);
                    225: #endif
1.21      kleink    226: int    pthread_getschedparam(pthread_t, int * __restrict,
                    227:            struct sched_param * __restrict);
1.16      christos  228: int    pthread_setschedparam(pthread_t, int, const struct sched_param *);
1.25      rmind     229: int    pthread_setschedprio(pthread_t, int);
1.2       thorpej   230:
                    231: int    *pthread__errno(void);
1.24      ad        232:
                    233: #if defined(_NETBSD_SOURCE)
1.28      rmind     234: int    pthread_getaffinity_np(pthread_t, size_t, cpuset_t *);
                    235: int    pthread_setaffinity_np(pthread_t, size_t, cpuset_t *);
1.34      christos  236: int    pthread_getattr_np(pthread_t, pthread_attr_t *);
1.28      rmind     237:
1.24      ad        238: int    pthread_mutex_held_np(pthread_mutex_t *);
                    239: pthread_t pthread_mutex_owner_np(pthread_mutex_t *);
                    240:
                    241: int    pthread_rwlock_held_np(pthread_rwlock_t *);
                    242: int    pthread_rwlock_wrheld_np(pthread_rwlock_t *);
                    243: int    pthread_rwlock_rdheld_np(pthread_rwlock_t *);
1.32      pooka     244:
                    245: int    pthread_cond_has_waiters_np(pthread_cond_t *);
1.24      ad        246: #endif /* _NETBSD_SOURCE */
                    247:
1.2       thorpej   248: __END_DECLS
                    249:
                    250: #define        PTHREAD_CREATE_JOINABLE 0
                    251: #define        PTHREAD_CREATE_DETACHED 1
                    252:
1.14      nathanw   253: #define PTHREAD_INHERIT_SCHED  0
                    254: #define PTHREAD_EXPLICIT_SCHED 1
                    255:
                    256: #define PTHREAD_SCOPE_PROCESS  0
                    257: #define PTHREAD_SCOPE_SYSTEM   1
                    258:
1.2       thorpej   259: #define PTHREAD_PROCESS_PRIVATE        0
                    260: #define PTHREAD_PROCESS_SHARED 1
                    261:
                    262: #define PTHREAD_CANCEL_DEFERRED                0
                    263: #define PTHREAD_CANCEL_ASYNCHRONOUS    1
                    264:
                    265: #define PTHREAD_CANCEL_ENABLE          0
                    266: #define PTHREAD_CANCEL_DISABLE         1
                    267:
                    268: #define PTHREAD_BARRIER_SERIAL_THREAD  1234567
                    269:
                    270: /*
                    271:  * POSIX 1003.1-2001, section 2.5.9.3: "The symbolic constant
                    272:  * PTHREAD_CANCELED expands to a constant expression of type (void *)
                    273:  * whose value matches no pointer to an object in memory nor the value
                    274:  * NULL."
                    275:  */
                    276: #define PTHREAD_CANCELED       ((void *) 1)
1.9       thorpej   277:
                    278: /*
                    279:  * Maximum length of a thread's name, including the terminating NUL.
                    280:  */
                    281: #define        PTHREAD_MAX_NAMELEN_NP  32
1.2       thorpej   282:
                    283: /*
                    284:  * Mutex attributes.
                    285:  */
                    286: #define        PTHREAD_MUTEX_NORMAL            0
                    287: #define        PTHREAD_MUTEX_ERRORCHECK        1
                    288: #define        PTHREAD_MUTEX_RECURSIVE         2
                    289: #define        PTHREAD_MUTEX_DEFAULT           PTHREAD_MUTEX_NORMAL
1.12      nathanw   290:
1.37      christos  291: #define        PTHREAD_PRIO_NONE               0
                    292: #define        PTHREAD_PRIO_INHERIT            1
                    293: #define        PTHREAD_PRIO_PROTECT            2
                    294:
1.12      nathanw   295: #define PTHREAD_COND_INITIALIZER       _PTHREAD_COND_INITIALIZER
                    296: #define PTHREAD_MUTEX_INITIALIZER      _PTHREAD_MUTEX_INITIALIZER
                    297: #define PTHREAD_ONCE_INIT              _PTHREAD_ONCE_INIT
                    298: #define PTHREAD_RWLOCK_INITIALIZER     _PTHREAD_RWLOCK_INITIALIZER
                    299: #define PTHREAD_SPINLOCK_INITIALIZER   _PTHREAD_SPINLOCK_INITIALIZER
1.2       thorpej   300:
1.17      nathanw   301: /*
                    302:  * Use macros to rename many pthread functions to the corresponding
                    303:  * libc symbols which are either trivial/no-op stubs or the real
                    304:  * thing, depending on whether libpthread is linked in to the
                    305:  * program. This permits code, particularly libraries that do not
                    306:  * directly use threads but want to be thread-safe in the presence of
                    307:  * threaded callers, to use pthread mutexes and the like without
                    308:  * unnecessairly including libpthread in their linkage.
                    309:  *
                    310:  * Left out of this list are functions that can't sensibly be trivial
                    311:  * or no-op stubs in a single-threaded process (pthread_create,
                    312:  * pthread_kill, pthread_detach), functions that normally block and
1.18      nathanw   313:  * wait for another thread to do something (pthread_join), and
                    314:  * functions that don't make sense without the previous functions
                    315:  * (pthread_attr_*). The pthread_cond_wait and pthread_cond_timedwait
                    316:  * functions are useful in implementing certain protection mechanisms,
1.19      wiz       317:  * though a non-buggy app shouldn't end up calling them in
1.18      nathanw   318:  * single-threaded mode.
1.17      nathanw   319:  *
                    320:  * The rename is done as:
                    321:  * #define pthread_foo __libc_foo
                    322:  * instead of
                    323:  * #define pthread_foo(x) __libc_foo((x))
                    324:  * in order that taking the address of the function ("func =
                    325:  * &pthread_foo;") continue to work.
                    326:  *
                    327:  * POSIX/SUSv3 requires that its functions exist as functions (even if
                    328:  * macro versions exist) and specifically that "#undef pthread_foo" is
                    329:  * legal and should not break anything. Code that does such will not
                    330:  * successfully get the stub behavior implemented here and will
                    331:  * require libpthread to be linked in.
                    332:  */
                    333:
                    334: #ifndef __LIBPTHREAD_SOURCE__
                    335: __BEGIN_DECLS
1.21      kleink    336: int    __libc_mutex_init(pthread_mutex_t * __restrict, const pthread_mutexattr_t * __restrict);
1.17      nathanw   337: int    __libc_mutex_lock(pthread_mutex_t *);
                    338: int    __libc_mutex_trylock(pthread_mutex_t *);
                    339: int    __libc_mutex_unlock(pthread_mutex_t *);
                    340: int    __libc_mutex_destroy(pthread_mutex_t *);
                    341:
                    342: int    __libc_mutexattr_init(pthread_mutexattr_t *);
                    343: int    __libc_mutexattr_settype(pthread_mutexattr_t *, int);
                    344: int    __libc_mutexattr_destroy(pthread_mutexattr_t *);
                    345: __END_DECLS
                    346:
                    347: #define        pthread_mutex_init              __libc_mutex_init
                    348: #define        pthread_mutex_lock              __libc_mutex_lock
                    349: #define        pthread_mutex_trylock           __libc_mutex_trylock
                    350: #define        pthread_mutex_unlock            __libc_mutex_unlock
                    351: #define        pthread_mutex_destroy           __libc_mutex_destroy
                    352:
                    353: #define        pthread_mutexattr_init          __libc_mutexattr_init
                    354: #define        pthread_mutexattr_settype       __libc_mutexattr_settype
                    355: #define        pthread_mutexattr_destroy       __libc_mutexattr_destroy
                    356:
                    357: __BEGIN_DECLS
1.21      kleink    358: int    __libc_cond_init(pthread_cond_t * __restrict,
                    359:            const pthread_condattr_t * __restrict);
1.17      nathanw   360: int    __libc_cond_signal(pthread_cond_t *);
                    361: int    __libc_cond_broadcast(pthread_cond_t *);
1.21      kleink    362: int    __libc_cond_wait(pthread_cond_t * __restrict,
                    363:            pthread_mutex_t * __restrict);
1.33      christos  364: #ifndef __LIBC12_SOURCE__
1.21      kleink    365: int    __libc_cond_timedwait(pthread_cond_t * __restrict,
                    366:            pthread_mutex_t * __restrict, const struct timespec * __restrict);
1.33      christos  367: #endif
1.17      nathanw   368: int    __libc_cond_destroy(pthread_cond_t *);
                    369: __END_DECLS
                    370:
                    371: #define        pthread_cond_init               __libc_cond_init
                    372: #define        pthread_cond_signal             __libc_cond_signal
                    373: #define        pthread_cond_broadcast          __libc_cond_broadcast
1.18      nathanw   374: #define        pthread_cond_wait               __libc_cond_wait
                    375: #define        pthread_cond_timedwait          __libc_cond_timedwait
1.17      nathanw   376: #define        pthread_cond_destroy            __libc_cond_destroy
                    377:
                    378: __BEGIN_DECLS
1.21      kleink    379: int    __libc_rwlock_init(pthread_rwlock_t * __restrict,
                    380:            const pthread_rwlockattr_t * __restrict);
1.17      nathanw   381: int    __libc_rwlock_rdlock(pthread_rwlock_t *);
                    382: int    __libc_rwlock_wrlock(pthread_rwlock_t *);
                    383: int    __libc_rwlock_tryrdlock(pthread_rwlock_t *);
                    384: int    __libc_rwlock_trywrlock(pthread_rwlock_t *);
                    385: int    __libc_rwlock_unlock(pthread_rwlock_t *);
                    386: int    __libc_rwlock_destroy(pthread_rwlock_t *);
                    387: __END_DECLS
                    388:
                    389: #define        pthread_rwlock_init             __libc_rwlock_init
                    390: #define        pthread_rwlock_rdlock           __libc_rwlock_rdlock
                    391: #define        pthread_rwlock_wrlock           __libc_rwlock_wrlock
                    392: #define        pthread_rwlock_tryrdlock        __libc_rwlock_tryrdlock
                    393: #define        pthread_rwlock_trywrlock        __libc_rwlock_trywrlock
                    394: #define        pthread_rwlock_unlock           __libc_rwlock_unlock
                    395: #define        pthread_rwlock_destroy          __libc_rwlock_destroy
                    396:
                    397: __BEGIN_DECLS
                    398: int    __libc_thr_keycreate(pthread_key_t *, void (*)(void *));
                    399: int    __libc_thr_setspecific(pthread_key_t, const void *);
                    400: void   *__libc_thr_getspecific(pthread_key_t);
                    401: int    __libc_thr_keydelete(pthread_key_t);
                    402: __END_DECLS
                    403:
                    404: #define        pthread_key_create              __libc_thr_keycreate
                    405: #define        pthread_setspecific             __libc_thr_setspecific
                    406: #define        pthread_getspecific             __libc_thr_getspecific
                    407: #define        pthread_key_delete              __libc_thr_keydelete
                    408:
                    409: __BEGIN_DECLS
                    410: int    __libc_thr_once(pthread_once_t *, void (*)(void));
                    411: pthread_t      __libc_thr_self(void);
                    412: void   __libc_thr_exit(void *) __attribute__((__noreturn__));
                    413: int    __libc_thr_setcancelstate(int, int *);
1.22      drochner  414: int    __libc_thr_equal(pthread_t, pthread_t);
1.23      ad        415: unsigned int   __libc_thr_curcpu(void);
1.17      nathanw   416: __END_DECLS
                    417:
                    418: #define        pthread_once                    __libc_thr_once
                    419: #define        pthread_self                    __libc_thr_self
                    420: #define        pthread_exit                    __libc_thr_exit
                    421: #define        pthread_setcancelstate          __libc_thr_setcancelstate
1.22      drochner  422: #define pthread_equal                  __libc_thr_equal
1.23      ad        423: #define pthread_curcpu_np              __libc_thr_curcpu
1.17      nathanw   424:
                    425: #endif /* __LIBPTHREAD_SOURCE__ */
                    426:
1.2       thorpej   427: #endif /* _LIB_PTHREAD_H */

CVSweb <webmaster@jp.NetBSD.org>