1*53ee8cc1Swenshuai.xi /* pthread.h 2*53ee8cc1Swenshuai.xi * 3*53ee8cc1Swenshuai.xi * Written by Joel Sherrill <joel@OARcorp.com>. 4*53ee8cc1Swenshuai.xi * 5*53ee8cc1Swenshuai.xi * COPYRIGHT (c) 1989-2000. 6*53ee8cc1Swenshuai.xi * On-Line Applications Research Corporation (OAR). 7*53ee8cc1Swenshuai.xi * 8*53ee8cc1Swenshuai.xi * Permission to use, copy, modify, and distribute this software for any 9*53ee8cc1Swenshuai.xi * purpose without fee is hereby granted, provided that this entire notice 10*53ee8cc1Swenshuai.xi * is included in all copies of any software which is or includes a copy 11*53ee8cc1Swenshuai.xi * or modification of this software. 12*53ee8cc1Swenshuai.xi * 13*53ee8cc1Swenshuai.xi * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED 14*53ee8cc1Swenshuai.xi * WARRANTY. IN PARTICULAR, THE AUTHOR MAKES NO REPRESENTATION 15*53ee8cc1Swenshuai.xi * OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY OF THIS 16*53ee8cc1Swenshuai.xi * SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. 17*53ee8cc1Swenshuai.xi * 18*53ee8cc1Swenshuai.xi * $Id: pthread.h,v 1.3 2002/10/08 13:03:07 joel Exp $ 19*53ee8cc1Swenshuai.xi */ 20*53ee8cc1Swenshuai.xi 21*53ee8cc1Swenshuai.xi #ifndef __PTHREAD_h 22*53ee8cc1Swenshuai.xi #define __PTHREAD_h 23*53ee8cc1Swenshuai.xi 24*53ee8cc1Swenshuai.xi #ifdef __cplusplus 25*53ee8cc1Swenshuai.xi extern "C" { 26*53ee8cc1Swenshuai.xi #endif 27*53ee8cc1Swenshuai.xi 28*53ee8cc1Swenshuai.xi #include <unistd.h> 29*53ee8cc1Swenshuai.xi 30*53ee8cc1Swenshuai.xi #if defined(_POSIX_THREADS) 31*53ee8cc1Swenshuai.xi 32*53ee8cc1Swenshuai.xi #include <sys/types.h> 33*53ee8cc1Swenshuai.xi #include <time.h> 34*53ee8cc1Swenshuai.xi #include <sys/sched.h> 35*53ee8cc1Swenshuai.xi 36*53ee8cc1Swenshuai.xi /* Register Fork Handlers, P1003.1c/Draft 10, P1003.1c/Draft 10, p. 27 37*53ee8cc1Swenshuai.xi 38*53ee8cc1Swenshuai.xi If an OS does not support processes, then it falls under this provision 39*53ee8cc1Swenshuai.xi and may not provide pthread_atfork(): 40*53ee8cc1Swenshuai.xi 41*53ee8cc1Swenshuai.xi "Either the implementation shall support the pthread_atfork() function 42*53ee8cc1Swenshuai.xi as described above or the pthread_atfork() funciton shall not be 43*53ee8cc1Swenshuai.xi provided." 44*53ee8cc1Swenshuai.xi 45*53ee8cc1Swenshuai.xi NOTE: RTEMS does not provide pthread_atfork(). */ 46*53ee8cc1Swenshuai.xi 47*53ee8cc1Swenshuai.xi #if !defined(__rtems__) 48*53ee8cc1Swenshuai.xi #warning "Add pthread_atfork() prototype" 49*53ee8cc1Swenshuai.xi #endif 50*53ee8cc1Swenshuai.xi 51*53ee8cc1Swenshuai.xi /* Mutex Initialization Attributes, P1003.1c/Draft 10, p. 81 */ 52*53ee8cc1Swenshuai.xi 53*53ee8cc1Swenshuai.xi int _EXFUN(pthread_mutexattr_init, (pthread_mutexattr_t *attr)); 54*53ee8cc1Swenshuai.xi int _EXFUN(pthread_mutexattr_destroy, (pthread_mutexattr_t *attr)); 55*53ee8cc1Swenshuai.xi int _EXFUN(pthread_mutexattr_getpshared, 56*53ee8cc1Swenshuai.xi (const pthread_mutexattr_t *attr, int *pshared)); 57*53ee8cc1Swenshuai.xi int _EXFUN(pthread_mutexattr_setpshared, 58*53ee8cc1Swenshuai.xi (pthread_mutexattr_t *attr, int pshared)); 59*53ee8cc1Swenshuai.xi 60*53ee8cc1Swenshuai.xi /* Initializing and Destroying a Mutex, P1003.1c/Draft 10, p. 87 */ 61*53ee8cc1Swenshuai.xi 62*53ee8cc1Swenshuai.xi int _EXFUN(pthread_mutex_init, 63*53ee8cc1Swenshuai.xi (pthread_mutex_t *mutex, const pthread_mutexattr_t *attr)); 64*53ee8cc1Swenshuai.xi int _EXFUN(pthread_mutex_destroy, (pthread_mutex_t *mutex)); 65*53ee8cc1Swenshuai.xi 66*53ee8cc1Swenshuai.xi /* This is used to statically initialize a pthread_mutex_t. Example: 67*53ee8cc1Swenshuai.xi 68*53ee8cc1Swenshuai.xi pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; 69*53ee8cc1Swenshuai.xi */ 70*53ee8cc1Swenshuai.xi 71*53ee8cc1Swenshuai.xi #define PTHREAD_MUTEX_INITIALIZER ((pthread_mutex_t) 0xFFFFFFFF) 72*53ee8cc1Swenshuai.xi 73*53ee8cc1Swenshuai.xi /* Locking and Unlocking a Mutex, P1003.1c/Draft 10, p. 93 74*53ee8cc1Swenshuai.xi NOTE: P1003.4b/D8 adds pthread_mutex_timedlock(), p. 29 */ 75*53ee8cc1Swenshuai.xi 76*53ee8cc1Swenshuai.xi int _EXFUN(pthread_mutex_lock, (pthread_mutex_t *mutex)); 77*53ee8cc1Swenshuai.xi int _EXFUN(pthread_mutex_trylock, (pthread_mutex_t *mutex)); 78*53ee8cc1Swenshuai.xi int _EXFUN(pthread_mutex_unlock, (pthread_mutex_t *mutex)); 79*53ee8cc1Swenshuai.xi 80*53ee8cc1Swenshuai.xi #if defined(_POSIX_TIMEOUTS) 81*53ee8cc1Swenshuai.xi 82*53ee8cc1Swenshuai.xi int _EXFUN(pthread_mutex_timedlock, 83*53ee8cc1Swenshuai.xi (pthread_mutex_t *mutex, const struct timespec *timeout)); 84*53ee8cc1Swenshuai.xi 85*53ee8cc1Swenshuai.xi #endif /* _POSIX_TIMEOUTS */ 86*53ee8cc1Swenshuai.xi 87*53ee8cc1Swenshuai.xi /* Condition Variable Initialization Attributes, P1003.1c/Draft 10, p. 96 */ 88*53ee8cc1Swenshuai.xi 89*53ee8cc1Swenshuai.xi int _EXFUN(pthread_condattr_init, (pthread_condattr_t *attr)); 90*53ee8cc1Swenshuai.xi int _EXFUN(pthread_condattr_destroy, (pthread_condattr_t *attr)); 91*53ee8cc1Swenshuai.xi int _EXFUN(pthread_condattr_getpshared, 92*53ee8cc1Swenshuai.xi (const pthread_condattr_t *attr, int *pshared)); 93*53ee8cc1Swenshuai.xi int _EXFUN(pthread_condattr_setpshared, 94*53ee8cc1Swenshuai.xi (pthread_condattr_t *attr, int pshared)); 95*53ee8cc1Swenshuai.xi 96*53ee8cc1Swenshuai.xi /* Initializing and Destroying a Condition Variable, P1003.1c/Draft 10, p. 87 */ 97*53ee8cc1Swenshuai.xi 98*53ee8cc1Swenshuai.xi int _EXFUN(pthread_cond_init, 99*53ee8cc1Swenshuai.xi (pthread_cond_t *cond, const pthread_condattr_t *attr)); 100*53ee8cc1Swenshuai.xi int _EXFUN(pthread_cond_destroy, (pthread_cond_t *mutex)); 101*53ee8cc1Swenshuai.xi 102*53ee8cc1Swenshuai.xi /* This is used to statically initialize a pthread_cond_t. Example: 103*53ee8cc1Swenshuai.xi 104*53ee8cc1Swenshuai.xi pthread_cond_t cond = PTHREAD_COND_INITIALIZER; 105*53ee8cc1Swenshuai.xi */ 106*53ee8cc1Swenshuai.xi 107*53ee8cc1Swenshuai.xi #define PTHREAD_COND_INITIALIZER ((pthread_mutex_t) 0xFFFFFFFF) 108*53ee8cc1Swenshuai.xi 109*53ee8cc1Swenshuai.xi /* Broadcasting and Signaling a Condition, P1003.1c/Draft 10, p. 101 */ 110*53ee8cc1Swenshuai.xi 111*53ee8cc1Swenshuai.xi int _EXFUN(pthread_cond_signal, (pthread_cond_t *cond)); 112*53ee8cc1Swenshuai.xi int _EXFUN(pthread_cond_broadcast, (pthread_cond_t *cond)); 113*53ee8cc1Swenshuai.xi 114*53ee8cc1Swenshuai.xi /* Waiting on a Condition, P1003.1c/Draft 10, p. 105 */ 115*53ee8cc1Swenshuai.xi 116*53ee8cc1Swenshuai.xi int _EXFUN(pthread_cond_wait, 117*53ee8cc1Swenshuai.xi (pthread_cond_t *cond, pthread_mutex_t *mutex)); 118*53ee8cc1Swenshuai.xi 119*53ee8cc1Swenshuai.xi int _EXFUN(pthread_cond_timedwait, 120*53ee8cc1Swenshuai.xi (pthread_cond_t *cond, pthread_mutex_t *mutex, 121*53ee8cc1Swenshuai.xi const struct timespec *abstime)); 122*53ee8cc1Swenshuai.xi 123*53ee8cc1Swenshuai.xi #if defined(_POSIX_THREAD_PRIORITY_SCHEDULING) 124*53ee8cc1Swenshuai.xi 125*53ee8cc1Swenshuai.xi /* Thread Creation Scheduling Attributes, P1003.1c/Draft 10, p. 120 */ 126*53ee8cc1Swenshuai.xi 127*53ee8cc1Swenshuai.xi int _EXFUN(pthread_attr_setscope, 128*53ee8cc1Swenshuai.xi (pthread_attr_t *attr, int contentionscope)); 129*53ee8cc1Swenshuai.xi int _EXFUN(pthread_attr_getscope, 130*53ee8cc1Swenshuai.xi (const pthread_attr_t *attr, int *contentionscope)); 131*53ee8cc1Swenshuai.xi int _EXFUN(pthread_attr_setinheritsched, 132*53ee8cc1Swenshuai.xi (pthread_attr_t *attr, int inheritsched)); 133*53ee8cc1Swenshuai.xi int _EXFUN(pthread_attr_getinheritsched, 134*53ee8cc1Swenshuai.xi (const pthread_attr_t *attr, int *inheritsched)); 135*53ee8cc1Swenshuai.xi int _EXFUN(pthread_attr_setschedpolicy, (pthread_attr_t *attr, int policy)); 136*53ee8cc1Swenshuai.xi int _EXFUN(pthread_attr_getschedpolicy, 137*53ee8cc1Swenshuai.xi (const pthread_attr_t *attr, int *policy)); 138*53ee8cc1Swenshuai.xi 139*53ee8cc1Swenshuai.xi #endif /* defined(_POSIX_THREAD_PRIORITY_SCHEDULING) */ 140*53ee8cc1Swenshuai.xi 141*53ee8cc1Swenshuai.xi int _EXFUN(pthread_attr_setschedparam, 142*53ee8cc1Swenshuai.xi (pthread_attr_t *attr, const struct sched_param *param)); 143*53ee8cc1Swenshuai.xi int _EXFUN(pthread_attr_getschedparam, 144*53ee8cc1Swenshuai.xi (const pthread_attr_t *attr, struct sched_param *param)); 145*53ee8cc1Swenshuai.xi 146*53ee8cc1Swenshuai.xi #if defined(_POSIX_THREAD_PRIORITY_SCHEDULING) 147*53ee8cc1Swenshuai.xi 148*53ee8cc1Swenshuai.xi /* Dynamic Thread Scheduling Parameters Access, P1003.1c/Draft 10, p. 124 */ 149*53ee8cc1Swenshuai.xi 150*53ee8cc1Swenshuai.xi int _EXFUN(pthread_getschedparam, 151*53ee8cc1Swenshuai.xi (pthread_t thread, int *policy, struct sched_param *param)); 152*53ee8cc1Swenshuai.xi int _EXFUN(pthread_setschedparam, 153*53ee8cc1Swenshuai.xi (pthread_t thread, int policy, struct sched_param *param)); 154*53ee8cc1Swenshuai.xi 155*53ee8cc1Swenshuai.xi #endif /* defined(_POSIX_THREAD_PRIORITY_SCHEDULING) */ 156*53ee8cc1Swenshuai.xi 157*53ee8cc1Swenshuai.xi #if defined(_POSIX_THREAD_PRIO_INHERIT) || defined(_POSIX_THREAD_PRIO_PROTECT) 158*53ee8cc1Swenshuai.xi 159*53ee8cc1Swenshuai.xi /* Mutex Initialization Scheduling Attributes, P1003.1c/Draft 10, p. 128 */ 160*53ee8cc1Swenshuai.xi 161*53ee8cc1Swenshuai.xi int _EXFUN(pthread_mutexattr_setprotocol, 162*53ee8cc1Swenshuai.xi (pthread_mutexattr_t *attr, int protocol)); 163*53ee8cc1Swenshuai.xi int _EXFUN(pthread_mutexattr_getprotocol, 164*53ee8cc1Swenshuai.xi (const pthread_mutexattr_t *attr, int *protocol)); 165*53ee8cc1Swenshuai.xi int _EXFUN(pthread_mutexattr_setprioceiling, 166*53ee8cc1Swenshuai.xi (pthread_mutexattr_t *attr, int prioceiling)); 167*53ee8cc1Swenshuai.xi int _EXFUN(pthread_mutexattr_getprioceiling, 168*53ee8cc1Swenshuai.xi (const pthread_mutexattr_t *attr, int *prioceiling)); 169*53ee8cc1Swenshuai.xi 170*53ee8cc1Swenshuai.xi #endif /* _POSIX_THREAD_PRIO_INHERIT || _POSIX_THREAD_PRIO_PROTECT */ 171*53ee8cc1Swenshuai.xi 172*53ee8cc1Swenshuai.xi #if defined(_POSIX_THREAD_PRIO_PROTECT) 173*53ee8cc1Swenshuai.xi 174*53ee8cc1Swenshuai.xi /* Change the Priority Ceiling of a Mutex, P1003.1c/Draft 10, p. 131 */ 175*53ee8cc1Swenshuai.xi 176*53ee8cc1Swenshuai.xi int _EXFUN(pthread_mutex_setprioceiling, 177*53ee8cc1Swenshuai.xi (pthread_mutex_t *mutex, int prioceiling, int *old_ceiling)); 178*53ee8cc1Swenshuai.xi int _EXFUN(pthread_mutex_getprioceiling, 179*53ee8cc1Swenshuai.xi (pthread_mutex_t *mutex, int *prioceiling)); 180*53ee8cc1Swenshuai.xi 181*53ee8cc1Swenshuai.xi #endif /* _POSIX_THREAD_PRIO_PROTECT */ 182*53ee8cc1Swenshuai.xi 183*53ee8cc1Swenshuai.xi /* Thread Creation Attributes, P1003.1c/Draft 10, p, 140 */ 184*53ee8cc1Swenshuai.xi 185*53ee8cc1Swenshuai.xi int _EXFUN(pthread_attr_init, (pthread_attr_t *attr)); 186*53ee8cc1Swenshuai.xi int _EXFUN(pthread_attr_destroy, (pthread_attr_t *attr)); 187*53ee8cc1Swenshuai.xi int _EXFUN(pthread_attr_getstacksize, 188*53ee8cc1Swenshuai.xi (const pthread_attr_t *attr, size_t *stacksize)); 189*53ee8cc1Swenshuai.xi int _EXFUN(pthread_attr_setstacksize, 190*53ee8cc1Swenshuai.xi (pthread_attr_t *attr, size_t stacksize)); 191*53ee8cc1Swenshuai.xi int _EXFUN(pthread_attr_getstackaddr, 192*53ee8cc1Swenshuai.xi (const pthread_attr_t *attr, void **stackaddr)); 193*53ee8cc1Swenshuai.xi int _EXFUN(pthread_attr_setstackaddr, 194*53ee8cc1Swenshuai.xi (pthread_attr_t *attr, void *stackaddr)); 195*53ee8cc1Swenshuai.xi int _EXFUN(pthread_attr_getdetachstate, 196*53ee8cc1Swenshuai.xi (const pthread_attr_t *attr, int *detachstate)); 197*53ee8cc1Swenshuai.xi int _EXFUN(pthread_attr_setdetachstate, 198*53ee8cc1Swenshuai.xi (pthread_attr_t *attr, int detachstate)); 199*53ee8cc1Swenshuai.xi 200*53ee8cc1Swenshuai.xi /* Thread Creation, P1003.1c/Draft 10, p. 144 */ 201*53ee8cc1Swenshuai.xi 202*53ee8cc1Swenshuai.xi int _EXFUN(pthread_create, 203*53ee8cc1Swenshuai.xi (pthread_t *thread, const pthread_attr_t *attr, 204*53ee8cc1Swenshuai.xi void *(*start_routine)( void * ), void *arg)); 205*53ee8cc1Swenshuai.xi 206*53ee8cc1Swenshuai.xi /* Wait for Thread Termination, P1003.1c/Draft 10, p. 147 */ 207*53ee8cc1Swenshuai.xi 208*53ee8cc1Swenshuai.xi int _EXFUN(pthread_join, (pthread_t thread, void **value_ptr)); 209*53ee8cc1Swenshuai.xi 210*53ee8cc1Swenshuai.xi /* Detaching a Thread, P1003.1c/Draft 10, p. 149 */ 211*53ee8cc1Swenshuai.xi 212*53ee8cc1Swenshuai.xi int _EXFUN(pthread_detach, (pthread_t thread)); 213*53ee8cc1Swenshuai.xi 214*53ee8cc1Swenshuai.xi /* Thread Termination, p1003.1c/Draft 10, p. 150 */ 215*53ee8cc1Swenshuai.xi 216*53ee8cc1Swenshuai.xi void _EXFUN(pthread_exit, (void *value_ptr)); 217*53ee8cc1Swenshuai.xi 218*53ee8cc1Swenshuai.xi /* Get Calling Thread's ID, p1003.1c/Draft 10, p. XXX */ 219*53ee8cc1Swenshuai.xi 220*53ee8cc1Swenshuai.xi pthread_t _EXFUN(pthread_self, (void)); 221*53ee8cc1Swenshuai.xi 222*53ee8cc1Swenshuai.xi /* Compare Thread IDs, p1003.1c/Draft 10, p. 153 */ 223*53ee8cc1Swenshuai.xi 224*53ee8cc1Swenshuai.xi int _EXFUN(pthread_equal, (pthread_t t1, pthread_t t2)); 225*53ee8cc1Swenshuai.xi 226*53ee8cc1Swenshuai.xi /* Dynamic Package Initialization */ 227*53ee8cc1Swenshuai.xi 228*53ee8cc1Swenshuai.xi /* This is used to statically initialize a pthread_once_t. Example: 229*53ee8cc1Swenshuai.xi 230*53ee8cc1Swenshuai.xi pthread_once_t once = PTHREAD_ONCE_INIT; 231*53ee8cc1Swenshuai.xi 232*53ee8cc1Swenshuai.xi NOTE: This is named inconsistently -- it should be INITIALIZER. */ 233*53ee8cc1Swenshuai.xi 234*53ee8cc1Swenshuai.xi #define PTHREAD_ONCE_INIT { 1, 0 } /* is initialized and not run */ 235*53ee8cc1Swenshuai.xi 236*53ee8cc1Swenshuai.xi int _EXFUN(pthread_once, 237*53ee8cc1Swenshuai.xi (pthread_once_t *once_control, void (*init_routine)(void))); 238*53ee8cc1Swenshuai.xi 239*53ee8cc1Swenshuai.xi /* Thread-Specific Data Key Create, P1003.1c/Draft 10, p. 163 */ 240*53ee8cc1Swenshuai.xi 241*53ee8cc1Swenshuai.xi int _EXFUN(pthread_key_create, 242*53ee8cc1Swenshuai.xi (pthread_key_t *key, void (*destructor)( void * ))); 243*53ee8cc1Swenshuai.xi 244*53ee8cc1Swenshuai.xi /* Thread-Specific Data Management, P1003.1c/Draft 10, p. 165 */ 245*53ee8cc1Swenshuai.xi 246*53ee8cc1Swenshuai.xi int _EXFUN(pthread_setspecific, (pthread_key_t key, const void *value)); 247*53ee8cc1Swenshuai.xi void * _EXFUN(pthread_getspecific, (pthread_key_t key)); 248*53ee8cc1Swenshuai.xi 249*53ee8cc1Swenshuai.xi /* Thread-Specific Data Key Deletion, P1003.1c/Draft 10, p. 167 */ 250*53ee8cc1Swenshuai.xi 251*53ee8cc1Swenshuai.xi int _EXFUN(pthread_key_delete, (pthread_key_t key)); 252*53ee8cc1Swenshuai.xi 253*53ee8cc1Swenshuai.xi /* Execution of a Thread, P1003.1c/Draft 10, p. 181 */ 254*53ee8cc1Swenshuai.xi 255*53ee8cc1Swenshuai.xi #define PTHREAD_CANCEL_ENABLE 0 256*53ee8cc1Swenshuai.xi #define PTHREAD_CANCEL_DISABLE 1 257*53ee8cc1Swenshuai.xi 258*53ee8cc1Swenshuai.xi #define PTHREAD_CANCEL_DEFERRED 0 259*53ee8cc1Swenshuai.xi #define PTHREAD_CANCEL_ASYNCHRONOUS 1 260*53ee8cc1Swenshuai.xi 261*53ee8cc1Swenshuai.xi #define PTHREAD_CANCELED ((void *) -1) 262*53ee8cc1Swenshuai.xi 263*53ee8cc1Swenshuai.xi int _EXFUN(pthread_cancel, (pthread_t thread)); 264*53ee8cc1Swenshuai.xi 265*53ee8cc1Swenshuai.xi /* Setting Cancelability State, P1003.1c/Draft 10, p. 183 */ 266*53ee8cc1Swenshuai.xi 267*53ee8cc1Swenshuai.xi int _EXFUN(pthread_setcancelstate, (int state, int *oldstate)); 268*53ee8cc1Swenshuai.xi int _EXFUN(pthread_setcanceltype, (int type, int *oldtype)); 269*53ee8cc1Swenshuai.xi void _EXFUN(pthread_testcancel, (void)); 270*53ee8cc1Swenshuai.xi 271*53ee8cc1Swenshuai.xi /* Establishing Cancellation Handlers, P1003.1c/Draft 10, p. 184 */ 272*53ee8cc1Swenshuai.xi 273*53ee8cc1Swenshuai.xi void _EXFUN(pthread_cleanup_push, (void (*routine)( void * ), void *arg)); 274*53ee8cc1Swenshuai.xi void _EXFUN(pthread_cleanup_pop, (int execute)); 275*53ee8cc1Swenshuai.xi 276*53ee8cc1Swenshuai.xi #if defined(_POSIX_THREAD_CPUTIME) 277*53ee8cc1Swenshuai.xi 278*53ee8cc1Swenshuai.xi /* Accessing a Thread CPU-time Clock, P1003.4b/D8, p. 58 */ 279*53ee8cc1Swenshuai.xi 280*53ee8cc1Swenshuai.xi int _EXFUN(pthread_getcpuclockid, 281*53ee8cc1Swenshuai.xi (pthread_t thread_id, clockid_t *clock_id)); 282*53ee8cc1Swenshuai.xi 283*53ee8cc1Swenshuai.xi /* CPU-time Clock Thread Creation Attribute, P1003.4b/D8, p. 59 */ 284*53ee8cc1Swenshuai.xi 285*53ee8cc1Swenshuai.xi int _EXFUN(pthread_attr_setcputime, 286*53ee8cc1Swenshuai.xi (pthread_attr_t *attr, int clock_allowed)); 287*53ee8cc1Swenshuai.xi 288*53ee8cc1Swenshuai.xi int _EXFUN(pthread_attr_getcputime, 289*53ee8cc1Swenshuai.xi (pthread_attr_t *attr, int *clock_allowed)); 290*53ee8cc1Swenshuai.xi 291*53ee8cc1Swenshuai.xi #endif /* defined(_POSIX_THREAD_CPUTIME) */ 292*53ee8cc1Swenshuai.xi 293*53ee8cc1Swenshuai.xi #endif /* defined(_POSIX_THREADS) */ 294*53ee8cc1Swenshuai.xi 295*53ee8cc1Swenshuai.xi #ifdef __cplusplus 296*53ee8cc1Swenshuai.xi } 297*53ee8cc1Swenshuai.xi #endif 298*53ee8cc1Swenshuai.xi 299*53ee8cc1Swenshuai.xi #endif 300*53ee8cc1Swenshuai.xi /* end of include file */ 301