pthread.h 7.1 KB
Newer Older
R
Rich Felker 已提交
1 2 3 4 5 6 7
#ifndef _PTHREAD_H
#define _PTHREAD_H
#ifdef __cplusplus
extern "C" {
#endif

#define __NEED_time_t
R
Rich Felker 已提交
8
#define __NEED_clockid_t
R
Rich Felker 已提交
9 10 11
#define __NEED_struct_timespec
#define __NEED_sigset_t
#define __NEED_pthread_t
12 13 14 15 16 17 18 19 20 21 22 23
#define __NEED_pthread_attr_t
#define __NEED_pthread_mutexattr_t
#define __NEED_pthread_condattr_t
#define __NEED_pthread_rwlockattr_t
#define __NEED_pthread_barrierattr_t
#define __NEED_pthread_mutex_t
#define __NEED_pthread_cond_t
#define __NEED_pthread_rwlock_t
#define __NEED_pthread_barrier_t
#define __NEED_pthread_spinlock_t
#define __NEED_pthread_key_t
#define __NEED_pthread_once_t
R
Rich Felker 已提交
24 25 26 27
#define __NEED_size_t

#include <bits/alltypes.h>

28 29
#include <sched.h>
#include <time.h>
R
Rich Felker 已提交
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

#define PTHREAD_CREATE_JOINABLE 0
#define PTHREAD_CREATE_DETACHED 1

#define PTHREAD_MUTEX_NORMAL 0
#define PTHREAD_MUTEX_DEFAULT 0
#define PTHREAD_MUTEX_RECURSIVE 1
#define PTHREAD_MUTEX_ERRORCHECK 2

#define PTHREAD_MUTEX_STALLED 0
#define PTHREAD_MUTEX_ROBUST 1

#define PTHREAD_PRIO_NONE 0
#define PTHREAD_PRIO_INHERIT 1
#define PTHREAD_PRIO_PROTECT 2

#define PTHREAD_INHERIT_SCHED 0
#define PTHREAD_EXPLICIT_SCHED 1

#define PTHREAD_SCOPE_SYSTEM 0
#define PTHREAD_SCOPE_PROCESS 1

#define PTHREAD_PROCESS_PRIVATE 0
#define PTHREAD_PROCESS_SHARED 1


#define PTHREAD_MUTEX_INITIALIZER {0}
#define PTHREAD_RWLOCK_INITIALIZER {0}
#define PTHREAD_COND_INITIALIZER {0}
#define PTHREAD_ONCE_INIT 0


#define PTHREAD_CANCEL_ENABLE 0
#define PTHREAD_CANCEL_DISABLE 1

#define PTHREAD_CANCEL_DEFERRED 0
#define PTHREAD_CANCEL_ASYNCHRONOUS 1

68
#define PTHREAD_CANCELED ((void *)-1)
R
Rich Felker 已提交
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92


#define PTHREAD_BARRIER_SERIAL_THREAD (-1)


int pthread_create(pthread_t *, const pthread_attr_t *, void *(*)(void *), void *);
int pthread_detach(pthread_t);
void pthread_exit(void *);
int pthread_join(pthread_t, void **);

pthread_t pthread_self(void);
int pthread_equal(pthread_t, pthread_t);

int pthread_setcancelstate(int, int *);
int pthread_setcanceltype(int, int *);
void pthread_testcancel(void);
int pthread_cancel(pthread_t);

int pthread_once(pthread_once_t *, void (*)(void));

int pthread_mutex_init(pthread_mutex_t *, const pthread_mutexattr_t *);
int pthread_mutex_lock(pthread_mutex_t *);
int pthread_mutex_unlock(pthread_mutex_t *);
int pthread_mutex_trylock(pthread_mutex_t *);
93
int pthread_mutex_timedlock(pthread_mutex_t *, const struct timespec *);
R
Rich Felker 已提交
94
int pthread_mutex_destroy(pthread_mutex_t *);
R
Rich Felker 已提交
95
int pthread_mutex_consistent(pthread_mutex_t *);
R
Rich Felker 已提交
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131

int pthread_cond_init(pthread_cond_t *, const pthread_condattr_t *);
int pthread_cond_destroy(pthread_cond_t *);
int pthread_cond_wait(pthread_cond_t *, pthread_mutex_t *);
int pthread_cond_timedwait(pthread_cond_t *, pthread_mutex_t *, const struct timespec *);
int pthread_cond_broadcast(pthread_cond_t *);
int pthread_cond_signal(pthread_cond_t *);

int pthread_rwlock_init(pthread_rwlock_t *, const pthread_rwlockattr_t *);
int pthread_rwlock_destroy(pthread_rwlock_t *);
int pthread_rwlock_rdlock(pthread_rwlock_t *);
int pthread_rwlock_tryrdlock(pthread_rwlock_t *);
int pthread_rwlock_timedrdlock(pthread_rwlock_t *, const struct timespec *);
int pthread_rwlock_wrlock(pthread_rwlock_t *);
int pthread_rwlock_trywrlock(pthread_rwlock_t *);
int pthread_rwlock_timedwrlock(pthread_rwlock_t *, const struct timespec *);
int pthread_rwlock_unlock(pthread_rwlock_t *);

int pthread_spin_init(pthread_spinlock_t *, int);
int pthread_spin_destroy(pthread_spinlock_t *);
int pthread_spin_lock(pthread_spinlock_t *);
int pthread_spin_trylock(pthread_spinlock_t *);
int pthread_spin_unlock(pthread_spinlock_t *);

int pthread_barrier_init(pthread_barrier_t *, const pthread_barrierattr_t *, unsigned);
int pthread_barrier_destroy(pthread_barrier_t *);
int pthread_barrier_wait(pthread_barrier_t *);

int pthread_key_create(pthread_key_t *, void (*)(void *));
int pthread_key_delete(pthread_key_t);
void *pthread_getspecific(pthread_key_t);
int pthread_setspecific(pthread_key_t, const void *);

int pthread_attr_init(pthread_attr_t *);
int pthread_attr_destroy(pthread_attr_t *);

132
int pthread_attr_getguardsize(const pthread_attr_t *, size_t *);
R
Rich Felker 已提交
133
int pthread_attr_setguardsize(pthread_attr_t *, size_t);
134
int pthread_attr_getstacksize(const pthread_attr_t *, size_t *);
R
Rich Felker 已提交
135
int pthread_attr_setstacksize(pthread_attr_t *, size_t);
136
int pthread_attr_getdetachstate(const pthread_attr_t *, int *);
R
Rich Felker 已提交
137
int pthread_attr_setdetachstate(pthread_attr_t *, int);
138
int pthread_attr_getstack(const pthread_attr_t *, void **, size_t *);
R
Rich Felker 已提交
139
int pthread_attr_setstack(pthread_attr_t *, void *, size_t);
140
int pthread_attr_getscope(const pthread_attr_t *, int *);
R
Rich Felker 已提交
141
int pthread_attr_setscope(pthread_attr_t *, int);
142
int pthread_attr_getschedpolicy(const pthread_attr_t *, int *);
R
Rich Felker 已提交
143
int pthread_attr_setschedpolicy(pthread_attr_t *, int);
144
int pthread_attr_getschedparam(const pthread_attr_t *, struct sched_param *);
R
Rich Felker 已提交
145
int pthread_attr_setschedparam(pthread_attr_t *, const struct sched_param *);
146
int pthread_attr_getinheritsched(const pthread_attr_t *, int *);
R
Rich Felker 已提交
147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
int pthread_attr_setinheritsched(pthread_attr_t *, int);

int pthread_mutexattr_destroy(pthread_mutexattr_t *);
int pthread_mutexattr_getprioceiling(const pthread_mutexattr_t *, int *);
int pthread_mutexattr_getprotocol(const pthread_mutexattr_t *, int *);
int pthread_mutexattr_getpshared(const pthread_mutexattr_t *, int *);
int pthread_mutexattr_getrobust(const pthread_mutexattr_t *, int *);
int pthread_mutexattr_gettype(const pthread_mutexattr_t *, int *);
int pthread_mutexattr_init(pthread_mutexattr_t *);
int pthread_mutexattr_setprioceiling(pthread_mutexattr_t *, int);
int pthread_mutexattr_setprotocol(pthread_mutexattr_t *, int);
int pthread_mutexattr_setpshared(pthread_mutexattr_t *, int);
int pthread_mutexattr_setrobust(pthread_mutexattr_t *, int);
int pthread_mutexattr_settype(pthread_mutexattr_t *, int);

162 163 164 165 166 167 168 169 170 171 172 173
int pthread_condattr_init(pthread_condattr_t *);
int pthread_condattr_destroy(pthread_condattr_t *);
int pthread_condattr_setclock(pthread_condattr_t *, clockid_t);
int pthread_condattr_setpshared(pthread_condattr_t *, int);
int pthread_condattr_getclock(const pthread_condattr_t *, clockid_t *);
int pthread_condattr_getpshared(const pthread_condattr_t *, int *);

int pthread_rwlockattr_init(pthread_rwlockattr_t *);
int pthread_rwlockattr_destroy(pthread_rwlockattr_t *);
int pthread_rwlockattr_setpshared(pthread_rwlockattr_t *, int);
int pthread_rwlockattr_getpshared(const pthread_rwlockattr_t *, int *);

R
Rich Felker 已提交
174 175 176 177 178
int pthread_barrierattr_destroy(pthread_barrierattr_t *);
int pthread_barrierattr_getpshared(const pthread_barrierattr_t *, int *);
int pthread_barrierattr_init(pthread_barrierattr_t *);
int pthread_barrierattr_setpshared(pthread_barrierattr_t *, int);

R
Rich Felker 已提交
179 180
int pthread_atfork(void (*)(void), void (*)(void), void (*)(void));

R
Rich Felker 已提交
181 182 183
#include <bits/pthread.h>

int __setjmp(void *);
184
#ifndef __pthread_register_cancel
R
Rich Felker 已提交
185 186 187
void __pthread_register_cancel(struct __ptcb *);
void __pthread_unregister_cancel(struct __ptcb *);
void __pthread_unwind_next(struct __ptcb *);
188
#endif
R
Rich Felker 已提交
189 190 191 192 193 194 195 196 197 198 199 200 201 202 203

#define pthread_cleanup_push(f, x) \
do { struct __ptcb __cb; void (*__f)(void *) = (f); void *__x = (x); \
if (__setjmp(__cb.__jb)) __f(__x), __pthread_unwind_next(&__cb); \
__pthread_register_cancel(&__cb); {

#define pthread_cleanup_pop(r) ; } \
__pthread_unregister_cancel(&__cb); \
if (r) __f(__x); } while (0)


#ifdef __cplusplus
}
#endif
#endif