?? pthread.h
字號:
/* Linuxthreads - a simple clone()-based implementation of Posix *//* threads for Linux. *//* Copyright (C) 1996 Xavier Leroy (Xavier.Leroy@inria.fr) *//* *//* This program is free software; you can redistribute it and/or *//* modify it under the terms of the GNU Library General Public License *//* as published by the Free Software Foundation; either version 2 *//* of the License, or (at your option) any later version. *//* *//* This program is distributed in the hope that it will be useful, *//* but WITHOUT ANY WARRANTY; without even the implied warranty of *//* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *//* GNU Library General Public License for more details. */#ifndef _PTHREAD_H#define _PTHREAD_H 1#include <features.h>#include <sched.h>#include <time.h>#define __need_sigset_t#include <signal.h>#include <bits/pthreadtypes.h>#include <bits/initspin.h>#ifdef _LIBC#include <bits/uClibc_pthread.h>#endif__BEGIN_DECLS/* Initializers. */#define PTHREAD_MUTEX_INITIALIZER \ {0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, __LOCK_INITIALIZER}#ifdef __USE_GNU# define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \ {0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, __LOCK_INITIALIZER}# define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \ {0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP, __LOCK_INITIALIZER}# define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \ {0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, __LOCK_INITIALIZER}#endif#define PTHREAD_COND_INITIALIZER {__LOCK_INITIALIZER, 0}#ifdef __USE_UNIX98# define PTHREAD_RWLOCK_INITIALIZER \ { __LOCK_INITIALIZER, 0, NULL, NULL, NULL, \ PTHREAD_RWLOCK_DEFAULT_NP, PTHREAD_PROCESS_PRIVATE }#endif#ifdef __USE_GNU# define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \ { __LOCK_INITIALIZER, 0, NULL, NULL, NULL, \ PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP, PTHREAD_PROCESS_PRIVATE }#endif/* Values for attributes. */enum{ PTHREAD_CREATE_JOINABLE,#define PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_DETACHED#define PTHREAD_CREATE_DETACHED PTHREAD_CREATE_DETACHED};enum{ PTHREAD_INHERIT_SCHED,#define PTHREAD_INHERIT_SCHED PTHREAD_INHERIT_SCHED PTHREAD_EXPLICIT_SCHED#define PTHREAD_EXPLICIT_SCHED PTHREAD_EXPLICIT_SCHED};enum{ PTHREAD_SCOPE_SYSTEM,#define PTHREAD_SCOPE_SYSTEM PTHREAD_SCOPE_SYSTEM PTHREAD_SCOPE_PROCESS#define PTHREAD_SCOPE_PROCESS PTHREAD_SCOPE_PROCESS};enum{ PTHREAD_MUTEX_ADAPTIVE_NP, PTHREAD_MUTEX_RECURSIVE_NP, PTHREAD_MUTEX_ERRORCHECK_NP, PTHREAD_MUTEX_TIMED_NP#ifdef __USE_UNIX98 , PTHREAD_MUTEX_NORMAL = PTHREAD_MUTEX_ADAPTIVE_NP, PTHREAD_MUTEX_RECURSIVE = PTHREAD_MUTEX_RECURSIVE_NP, PTHREAD_MUTEX_ERRORCHECK = PTHREAD_MUTEX_ERRORCHECK_NP, PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL#endif#ifdef __USE_GNU /* For compatibility. */ , PTHREAD_MUTEX_FAST_NP = PTHREAD_MUTEX_ADAPTIVE_NP#endif};enum{ PTHREAD_PROCESS_PRIVATE,#define PTHREAD_PROCESS_PRIVATE PTHREAD_PROCESS_PRIVATE PTHREAD_PROCESS_SHARED#define PTHREAD_PROCESS_SHARED PTHREAD_PROCESS_SHARED};#ifdef __USE_UNIX98enum{ PTHREAD_RWLOCK_PREFER_READER_NP, PTHREAD_RWLOCK_PREFER_WRITER_NP, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP, PTHREAD_RWLOCK_DEFAULT_NP = PTHREAD_RWLOCK_PREFER_WRITER_NP};#endif /* Unix98 */#define PTHREAD_ONCE_INIT 0/* Special constants */#ifdef __USE_XOPEN2K/* -1 is distinct from 0 and all errno constants */# define PTHREAD_BARRIER_SERIAL_THREAD -1#endif/* Cleanup buffers */struct _pthread_cleanup_buffer{ void (*__routine) (void *); /* Function to call. */ void *__arg; /* Its argument. */ int __canceltype; /* Saved cancellation type. */ struct _pthread_cleanup_buffer *__prev; /* Chaining of cleanup functions. */};/* Cancellation */enum{ PTHREAD_CANCEL_ENABLE,#define PTHREAD_CANCEL_ENABLE PTHREAD_CANCEL_ENABLE PTHREAD_CANCEL_DISABLE#define PTHREAD_CANCEL_DISABLE PTHREAD_CANCEL_DISABLE};enum{ PTHREAD_CANCEL_DEFERRED,#define PTHREAD_CANCEL_DEFERRED PTHREAD_CANCEL_DEFERRED PTHREAD_CANCEL_ASYNCHRONOUS#define PTHREAD_CANCEL_ASYNCHRONOUS PTHREAD_CANCEL_ASYNCHRONOUS};#define PTHREAD_CANCELED ((void *) -1)/* Function for handling threads. *//* Create a thread with given attributes ATTR (or default attributes if ATTR is NULL), and call function START_ROUTINE with given arguments ARG. */extern int pthread_create (pthread_t *__restrict __thread_id, __const pthread_attr_t *__restrict __attr, void *(*__start_routine) (void *), void *__restrict __arg) __THROW;/* Obtain the identifier of the current thread. */extern pthread_t pthread_self (void) __THROW;/* Compare two thread identifiers. */extern int pthread_equal (pthread_t __thread1, pthread_t __thread2) __THROW;/* Terminate calling thread. */extern void pthread_exit (void *__retval) __THROW __attribute__ ((__noreturn__));/* Make calling thread wait for termination of the thread TH. The exit status of the thread is stored in *THREAD_RETURN, if THREAD_RETURN is not NULL. */extern int pthread_join (pthread_t __th, void **__thread_return) __THROW;/* Indicate that the thread TH is never to be joined with PTHREAD_JOIN. The resources of TH will therefore be freed immediately when it terminates, instead of waiting for another thread to perform PTHREAD_JOIN on it. */extern int pthread_detach (pthread_t __th) __THROW;/* Functions for handling attributes. *//* Initialize thread attribute *ATTR with default attributes (detachstate is PTHREAD_JOINABLE, scheduling policy is SCHED_OTHER, no user-provided stack). */extern int pthread_attr_init (pthread_attr_t *__attr) __THROW;/* Destroy thread attribute *ATTR. */extern int pthread_attr_destroy (pthread_attr_t *__attr) __THROW;/* Set the `detachstate' attribute in *ATTR according to DETACHSTATE. */extern int pthread_attr_setdetachstate (pthread_attr_t *__attr, int __detachstate) __THROW;/* Return in *DETACHSTATE the `detachstate' attribute in *ATTR. */extern int pthread_attr_getdetachstate (__const pthread_attr_t *__attr, int *__detachstate) __THROW;/* Set scheduling parameters (priority, etc) in *ATTR according to PARAM. */extern int pthread_attr_setschedparam (pthread_attr_t *__restrict __attr, __const struct sched_param *__restrict __param) __THROW;/* Return in *PARAM the scheduling parameters of *ATTR. */extern int pthread_attr_getschedparam (__const pthread_attr_t *__restrict __attr, struct sched_param *__restrict __param) __THROW;/* Set scheduling policy in *ATTR according to POLICY. */extern int pthread_attr_setschedpolicy (pthread_attr_t *__attr, int __policy) __THROW;/* Return in *POLICY the scheduling policy of *ATTR. */extern int pthread_attr_getschedpolicy (__const pthread_attr_t *__restrict __attr, int *__restrict __policy) __THROW;/* Set scheduling inheritance mode in *ATTR according to INHERIT. */extern int pthread_attr_setinheritsched (pthread_attr_t *__attr, int __inherit) __THROW;/* Return in *INHERIT the scheduling inheritance mode of *ATTR. */extern int pthread_attr_getinheritsched (__const pthread_attr_t *__restrict __attr, int *__restrict __inherit) __THROW;/* Set scheduling contention scope in *ATTR according to SCOPE. */extern int pthread_attr_setscope (pthread_attr_t *__attr, int __scope) __THROW;/* Return in *SCOPE the scheduling contention scope of *ATTR. */extern int pthread_attr_getscope (__const pthread_attr_t *__restrict __attr, int *__restrict __scope) __THROW;#ifdef __USE_UNIX98/* Set the size of the guard area at the bottom of the thread. */extern int pthread_attr_setguardsize (pthread_attr_t *__attr, size_t __guardsize) __THROW;/* Get the size of the guard area at the bottom of the thread. */extern int pthread_attr_getguardsize (__const pthread_attr_t *__restrict __attr, size_t *__restrict __guardsize) __THROW;#endif/* Set the starting address of the stack of the thread to be created. Depending on whether the stack grows up or down the value must either be higher or lower than all the address in the memory block. The minimal size of the block must be PTHREAD_STACK_SIZE. */extern int pthread_attr_setstackaddr (pthread_attr_t *__attr, void *__stackaddr) __THROW;/* Return the previously set address for the stack. */extern int pthread_attr_getstackaddr (__const pthread_attr_t *__restrict __attr, void **__restrict __stackaddr) __THROW;#if 0/* Not yet implemented in uClibc! */#ifdef __USE_XOPEN2K/* The following two interfaces are intended to replace the last two. They require setting the address as well as the size since only setting the address will make the implementation on some architectures impossible. */extern int pthread_attr_setstack (pthread_attr_t *__attr, void *__stackaddr, size_t __stacksize) __THROW;/* Return the previously set address for the stack. */extern int pthread_attr_getstack (__const pthread_attr_t *__restrict __attr, void **__restrict __stackaddr, size_t *__restrict __stacksize) __THROW;#endif#endif/* Add information about the minimum stack size needed for the thread to be started. This size must never be less than PTHREAD_STACK_SIZE and must also not exceed the system limits. */extern int pthread_attr_setstacksize (pthread_attr_t *__attr, size_t __stacksize) __THROW;/* Return the currently used minimal stack size. */extern int pthread_attr_getstacksize (__const pthread_attr_t *__restrict __attr, size_t *__restrict __stacksize) __THROW;#if 0/* Not yet implemented in uClibc! */#ifdef __USE_GNU/* Get thread attributes corresponding to the already running thread TH. */extern int pthread_getattr_np (pthread_t __th, pthread_attr_t *__attr) __THROW;#endif#endif/* Functions for scheduling control. *//* Set the scheduling parameters for TARGET_THREAD according to POLICY and *PARAM. */extern int pthread_setschedparam (pthread_t __target_thread, int __policy, __const struct sched_param *__param) __THROW;/* Return in *POLICY and *PARAM the scheduling parameters for TARGET_THREAD. */extern int pthread_getschedparam (pthread_t __target_thread, int *__restrict __policy, struct sched_param *__restrict __param) __THROW;#ifdef __USE_UNIX98/* Determine level of concurrency. */extern int pthread_getconcurrency (void) __THROW;/* Set new concurrency level to LEVEL. */extern int pthread_setconcurrency (int __level) __THROW;#endif#if 0/* Not yet implemented in uClibc! */#ifdef __USE_GNU/* Yield the processor to another thread or process. This function is similar to the POSIX `sched_yield' function but might be differently implemented in the case of a m-on-n thread implementation. */extern int pthread_yield (void) __THROW;#endif#endif/* Functions for mutex handling. *//* Initialize MUTEX using attributes in *MUTEX_ATTR, or use the default values if later is NULL. */extern int pthread_mutex_init (pthread_mutex_t *__restrict __mutex, __const pthread_mutexattr_t *__restrict __mutex_attr) __THROW;/* Destroy MUTEX. */extern int pthread_mutex_destroy (pthread_mutex_t *__mutex) __THROW;/* Try to lock MUTEX. */extern int pthread_mutex_trylock (pthread_mutex_t *__mutex) __THROW;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -