The C and C++ Include Header Files
/usr/include/threads.h
$ cat -n /usr/include/threads.h 1 /* ISO C11 Standard: 7.26 - Thread support library
. 2 Copyright (C) 2018-2022 Free Software Foundation, Inc. 3 This file is part of the GNU C Library. 4 5 The GNU C Library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Lesser General Public 7 License as published by the Free Software Foundation; either 8 version 2.1 of the License, or (at your option) any later version. 9 10 The GNU C Library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public 16 License along with the GNU C Library; if not, see 17
. */ 18 19 #ifndef _THREADS_H 20 #define _THREADS_H 1 21 22 #include
23 #include
24 25 __BEGIN_DECLS 26 27 #include
28 #include
29 30 #ifndef __cplusplus 31 # define thread_local _Thread_local 32 #endif 33 34 #define TSS_DTOR_ITERATIONS 4 35 typedef __tss_t tss_t; 36 typedef void (*tss_dtor_t) (void*); 37 38 typedef __thrd_t thrd_t; 39 typedef int (*thrd_start_t) (void*); 40 41 /* Exit and error codes. */ 42 enum 43 { 44 thrd_success = 0, 45 thrd_busy = 1, 46 thrd_error = 2, 47 thrd_nomem = 3, 48 thrd_timedout = 4 49 }; 50 51 /* Mutex types. */ 52 enum 53 { 54 mtx_plain = 0, 55 mtx_recursive = 1, 56 mtx_timed = 2 57 }; 58 59 typedef __once_flag once_flag; 60 #define ONCE_FLAG_INIT __ONCE_FLAG_INIT 61 62 typedef union 63 { 64 char __size[__SIZEOF_PTHREAD_MUTEX_T]; 65 long int __align __LOCK_ALIGNMENT; 66 } mtx_t; 67 68 typedef union 69 { 70 char __size[__SIZEOF_PTHREAD_COND_T]; 71 __extension__ long long int __align __LOCK_ALIGNMENT; 72 } cnd_t; 73 74 /* Threads functions. */ 75 76 /* Create a new thread executing the function __FUNC. Arguments for __FUNC 77 are passed through __ARG. If succesful, __THR is set to new thread 78 identifier. */ 79 extern int thrd_create (thrd_t *__thr, thrd_start_t __func, void *__arg); 80 81 /* Check if __LHS and __RHS point to the same thread. */ 82 extern int thrd_equal (thrd_t __lhs, thrd_t __rhs); 83 84 /* Return current thread identifier. */ 85 extern thrd_t thrd_current (void); 86 87 /* Block current thread execution for at least the time pointed by 88 __TIME_POINT. The current thread may resume if receives a signal. In 89 that case, if __REMAINING is not NULL, the remaining time is stored in 90 the object pointed by it. */ 91 #ifndef __USE_TIME_BITS64 92 extern int thrd_sleep (const struct timespec *__time_point, 93 struct timespec *__remaining); 94 #else 95 # ifdef __REDIRECT 96 extern int __REDIRECT (thrd_sleep, (const struct timespec *__time_point, 97 struct timespec *__remaining), 98 __thrd_sleep64); 99 # else 100 # define thrd_sleep __thrd_sleep64 101 # endif 102 #endif 103 104 /* Terminate current thread execution, cleaning up any thread local 105 storage and freeing resources. Returns the value specified in __RES. */ 106 extern void thrd_exit (int __res) __attribute__ ((__noreturn__)); 107 108 /* Detach the thread identified by __THR from the current environment 109 (it does not allow join or wait for it). */ 110 extern int thrd_detach (thrd_t __thr); 111 112 /* Block current thread until execution of __THR is complete. In case that 113 __RES is not NULL, will store the return value of __THR when exiting. */ 114 extern int thrd_join (thrd_t __thr, int *__res); 115 116 /* Stop current thread execution and call the scheduler to decide which 117 thread should execute next. The current thread may be selected by the 118 scheduler to keep running. */ 119 extern void thrd_yield (void); 120 121 #ifdef __USE_EXTERN_INLINES 122 /* Optimizations. */ 123 __extern_inline int 124 thrd_equal (thrd_t __thread1, thrd_t __thread2) 125 { 126 return __thread1 == __thread2; 127 } 128 #endif 129 130 131 /* Mutex functions. */ 132 133 /* Creates a new mutex object with type __TYPE. If successful the new 134 object is pointed by __MUTEX. */ 135 extern int mtx_init (mtx_t *__mutex, int __type); 136 137 /* Block the current thread until the mutex pointed to by __MUTEX is 138 unlocked. In that case current thread will not be blocked. */ 139 extern int mtx_lock (mtx_t *__mutex); 140 141 /* Block the current thread until the mutex pointed by __MUTEX is unlocked 142 or time pointed by __TIME_POINT is reached. In case the mutex is unlock, 143 the current thread will not be blocked. */ 144 #ifndef __USE_TIME_BITS64 145 extern int mtx_timedlock (mtx_t *__restrict __mutex, 146 const struct timespec *__restrict __time_point); 147 #else 148 # ifdef __REDIRECT 149 extern int __REDIRECT (mtx_timedlock, (mtx_t *__restrict __mutex, 150 const struct timespec *__restrict 151 __time_point), 152 __mtx_timedlock64); 153 # else 154 # define mtx_timedlock __mtx_timedlock64 155 # endif 156 #endif 157 158 /* Try to lock the mutex pointed by __MUTEX without blocking. If the mutex 159 is free the current threads takes control of it, otherwise it returns 160 immediately. */ 161 extern int mtx_trylock (mtx_t *__mutex); 162 163 /* Unlock the mutex pointed by __MUTEX. It may potentially awake other 164 threads waiting on this mutex. */ 165 extern int mtx_unlock (mtx_t *__mutex); 166 167 /* Destroy the mutex object pointed by __MUTEX. */ 168 extern void mtx_destroy (mtx_t *__mutex); 169 170 171 /* Call function __FUNC exactly once, even if invoked from several threads. 172 All calls must be made with the same __FLAGS object. */ 173 extern void call_once (once_flag *__flag, void (*__func)(void)); 174 175 176 /* Condition variable functions. */ 177 178 /* Initialize new condition variable pointed by __COND. */ 179 extern int cnd_init (cnd_t *__cond); 180 181 /* Unblock one thread that currently waits on condition variable pointed 182 by __COND. */ 183 extern int cnd_signal (cnd_t *__cond); 184 185 /* Unblock all threads currently waiting on condition variable pointed by 186 __COND. */ 187 extern int cnd_broadcast (cnd_t *__cond); 188 189 /* Block current thread on the condition variable pointed by __COND. */ 190 extern int cnd_wait (cnd_t *__cond, mtx_t *__mutex); 191 192 /* Block current thread on the condition variable until condition variable 193 pointed by __COND is signaled or time pointed by __TIME_POINT is 194 reached. */ 195 #ifndef __USE_TIME_BITS64 196 extern int cnd_timedwait (cnd_t *__restrict __cond, 197 mtx_t *__restrict __mutex, 198 const struct timespec *__restrict __time_point); 199 #else 200 # ifdef __REDIRECT 201 extern int __REDIRECT (cnd_timedwait, (cnd_t *__restrict __cond, 202 mtx_t *__restrict __mutex, 203 const struct timespec *__restrict 204 __time_point), 205 __cnd_timedwait64); 206 # else 207 # define cnd_timedwait __cnd_timedwait64 208 # endif 209 #endif 210 211 /* Destroy condition variable pointed by __cond and free all of its 212 resources. */ 213 extern void cnd_destroy (cnd_t *__COND); 214 215 216 /* Thread specific storage functions. */ 217 218 /* Create new thread-specific storage key and stores it in the object pointed 219 by __TSS_ID. If __DESTRUCTOR is not NULL, the function will be called when 220 the thread terminates. */ 221 extern int tss_create (tss_t *__tss_id, tss_dtor_t __destructor); 222 223 /* Return the value held in thread-specific storage for the current thread 224 identified by __TSS_ID. */ 225 extern void *tss_get (tss_t __tss_id); 226 227 /* Sets the value of the thread-specific storage identified by __TSS_ID for 228 the current thread to __VAL. */ 229 extern int tss_set (tss_t __tss_id, void *__val); 230 231 /* Destroys the thread-specific storage identified by __TSS_ID. The 232 destructor is not called until thrd_exit is called. */ 233 extern void tss_delete (tss_t __tss_id); 234 235 __END_DECLS 236 237 #endif /* _THREADS_H */
Contact us
|
About us
|
Term of use
|
Copyright © 2000-2024 MyWebUniversity.com ™